Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Net Core 3.0和Serilog生成输出,如Microsoft.Extensions.Logging_C#_Logging_Dependency Injection_.net Core_Serilog - Fatal编程技术网

C# Net Core 3.0和Serilog生成输出,如Microsoft.Extensions.Logging

C# Net Core 3.0和Serilog生成输出,如Microsoft.Extensions.Logging,c#,logging,dependency-injection,.net-core,serilog,C#,Logging,Dependency Injection,.net Core,Serilog,我有一个使用.NETCore3.0的简单web应用程序 在主机生成器中,我执行以下操作: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => {

我有一个使用.NETCore3.0的简单web应用程序

在主机生成器中,我执行以下操作:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Console());
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
})
.useserlog((hostingContext,loggerConfiguration)=>loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration)
.Enrich.FromLogContext()的
.WriteTo.Console());
然后,我尝试在web app项目引用的另一个项目(使用netcoreapp3.0的简单dll)中实现它:

using using Microsoft.Extensions.Logging;
...
private readonly ILogger<MyClass> _logger;

public MyClass(ILogger<MyClass> logger){
  _logger = logger;
  ...
  Log.Logger.Information("this is a test {test}", command.GetType().Name);

  _logger.LogInformation("Command received: {CommandType}", command.GetType().Name);
}
...
使用Microsoft.Extensions.Logging;
...
专用只读ILogger\u记录器;
公共MyClass(ILogger记录器){
_记录器=记录器;
...
Log.Logger.Information(“这是一个测试{test}”,command.GetType().Name);
_logger.LogInformation(“收到的命令:{CommandType}”,Command.GetType().Name);
}
...
静态记录器工作正常,但_记录器的输出就好像我使用默认日志一样。但据我从阅读中了解,主机生成器现在替换了iLogger工厂,应该输出Serilog样式的输出


如何使_logger输出与Serilog输出一样整洁?

我遇到的问题是,每当我捕获队列事件时,日志都使用Microsoft.Extensions.Logging样式的日志

这似乎是因为事件侦听器在日志工厂被替换之前以某种方式被注册,但在之后被执行,这导致了奇怪的日志记录。我的解决方案是:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Console());
                    webBuilder.UseStartup<Startup>();
                });
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.useserlog((hostingContext,loggerConfiguration)=>loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration)
.Enrich.FromLogContext()的
.WriteTo.Console());
webBuilder.UseStartup();
});

我遇到的问题是,每当我捕获队列事件时,日志都使用Microsoft.Extensions.Logging样式的日志记录

这似乎是因为事件侦听器在日志工厂被替换之前以某种方式被注册,但在之后被执行,这导致了奇怪的日志记录。我的解决方案是:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Console());
                    webBuilder.UseStartup<Startup>();
                });
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.useserlog((hostingContext,loggerConfiguration)=>loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration)
.Enrich.FromLogContext()的
.WriteTo.Console());
webBuilder.UseStartup();
});

非常奇怪!你能在玩具项目中重现这个问题吗?(即文件>新项目EXE和附带的类库?)有趣。当我试图复制我的玩具项目时,它运行良好。在主项目中,当web应用程序从消息队列获取消息并启动连接到队列的侦听器时,就会发生这种情况。我会看看能否在我的玩具项目中重现这种行为。好吧,有点尴尬,但我最终解决了它。我会发布我自己问题的答案。非常奇怪!你能在玩具项目中重现这个问题吗?(即文件>新项目EXE和附带的类库?)有趣。当我试图复制我的玩具项目时,它运行良好。在主项目中,当web应用程序从消息队列获取消息并启动连接到队列的侦听器时,就会发生这种情况。我会看看能否在我的玩具项目中重现这种行为。好吧,有点尴尬,但我最终解决了它。我将发布我自己问题的答案。