C# Serilog未获取应用程序事件,仅获取编码的记录器事件

C# Serilog未获取应用程序事件,仅获取编码的记录器事件,c#,asp.net-core,asp.net-core-2.0,serilog,seq-logging,C#,Asp.net Core,Asp.net Core 2.0,Serilog,Seq Logging,我将应用程序设置为使用Serilog作为日志机制。事实上,我得到了日志文件,可以在Seq上查看它们。起初,我记录了应用程序事件,但由于某些原因,我不再记录它们。请参见下面的图片 在第一幅图中,我看到了应用程序事件。稍后,在执行相同的测试操作时,我不再获取应用程序事件,只获取文件中的编码事件(即\u logger.LogWarning(“Warning”);) 我在Main方法中设置了Serilog publicstaticintmain(字符串[]args) { var currentEnv

我将应用程序设置为使用Serilog作为日志机制。事实上,我得到了日志文件,可以在Seq上查看它们。起初,我记录了应用程序事件,但由于某些原因,我不再记录它们。请参见下面的图片

在第一幅图中,我看到了应用程序事件。稍后,在执行相同的测试操作时,我不再获取应用程序事件,只获取文件中的编码事件(即
\u logger.LogWarning(“Warning”);

我在Main方法中设置了Serilog

publicstaticintmain(字符串[]args)
{
var currentEnv=Environment.GetEnvironmentVariable(“ASPNETCORE_环境”);
var configuration=new ConfigurationBuilder()
.AddJsonFile(“appsettings.json”)
.AddJsonFile($“appsettings.{currentEnv}.json”,可选:true)
.AddenEnvironmentVariables()
.Build();
//配置记录器
Logger.Logger=新的LoggerConfiguration()
.ReadFrom.Configuration(配置)
.CreateLogger();
日志信息(“创建的记录器”);
尝试
{
日志信息(“启动web主机”);
BuildWebHost(args.Run();
返回0;
}
捕获(例外情况除外)
{
Log.Fatal(例如,“Web主机意外终止”);
返回1;
}
最后
{
Log.CloseAndFlush();
}
}
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.Build();
}
我的日志设置

“Serilog”:{
“使用”:[
“Serilog.Sinks.RollingFile”,
“Serilog.Sinks.Async”,
“Serilog.Sinks.ApplicationInsights”,
“Serilog.Sinks.Console”,
“Serilog.Sinks.Seq”
],
“最低级别”:{
“默认值”:“信息”,
“覆盖”:{
“Microsoft”:“警告”
}
},
“书面形式”:[
{
“名称”:“异步”,
“Args”:{
“配置”:[
{
“名称”:“滚动文件”,
“Args”:{“pathFormat”:“C:/Logs/Serilog/log-{Date}.log”}
},
{
“名称”:“序号”,
“Args:{“服务器URL”:”http://localhost:5341" }
}
]
}
}
],
“丰富”:[“FromLogContext”、“WithMachineName”、“WithThreadId”],
“财产”:{
“应用程序”:“WebTemplate”
}
}

在让Serilog更具功能之前,我想先弄清楚为什么不再获取应用程序事件。

BuildWebHost()中,您似乎缺少
useserlog()

公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)

.useserlog()//您在
BuildWebHost()中似乎缺少
useserlog()

公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)

.UseSerilog()//我希望这取决于Serilog设置中的以下部分:

“最低级别”:{
“默认值”:“信息”,
“覆盖”:{
“Microsoft”:“警告”
}
}
Nicholas Blumhardt详细介绍了
覆盖设置的工作原理:

因此,上述配置的效果是,当记录器属于Microsoft.*命名空间中的某个类型时,仅生成警告级别或警告级别以上的事件

这句话似乎直接适用于您的情况,即您要求Serilog过滤掉属于Microsoft.*命名空间且严重性低于
警告的所有事件


您在第一个屏幕截图中显示的消息来自MVC或Entity Framework,它们位于Microsoft.*命名空间中,并将以低于警告的严重性进行日志记录。

我希望这取决于Serilog设置中的以下部分:

“最低级别”:{
“默认值”:“信息”,
“覆盖”:{
“Microsoft”:“警告”
}
}
Nicholas Blumhardt详细介绍了
覆盖设置的工作原理:

因此,上述配置的效果是,当记录器属于Microsoft.*命名空间中的某个类型时,仅生成警告级别或警告级别以上的事件

这句话似乎直接适用于您的情况,即您要求Serilog过滤掉属于Microsoft.*命名空间且严重性低于
警告的所有事件


您在第一个屏幕截图中显示的消息来自MVC或实体框架,它们位于Microsoft.*命名空间中,日志记录的严重性将低于警告。

…如果在ConfigureServices中有此功能,是否需要它?…services.AddLogging(loggingBuilder=>loggingBuilder.AddSerilog(dispose:true));因为我得到的是记录器事件而不是应用程序事件,所以您应该添加
useserlog()
并删除对
services.AddLogging()
…如果我在ConfigureServices中有此功能,我需要它吗?…services.AddLogging(loggingBuilder=>loggingBuilder.AddSerilog(dispose:true));因为我得到的是记录器事件而不是应用程序事件,所以您应该添加
useserlog()
并删除对
services.AddLogging()的调用
public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseSerilog() // <- Add this line
        .UseStartup<Startup>()
        .Build();