【发布时间】:2021-06-02 21:02:38
【问题描述】:
我正在使用 Serilog 来记录应用程序洞察,但我只得到日志级别警告、错误和要记录的关键。在 appsettings.json 中,我将最低日志级别设置为详细,这会记录文件和控制台接收器的所有内容。
默认情况下,应用洞察只能记录警告及以上。在代码中(在配置日志中),我可以添加一个过滤器来覆盖这个默认的警告及以上。我更喜欢在 appsettings 中使用其他日志记录配置来执行此操作。
我如何使用 appsettings 允许 Serilog 将所有级别记录到 Application Insights?
- 我在应用程序洞察中获得了一些日志,因此连接性是 工作。
- 我在日志文件和控制台上看到了所有日志级别。
在配置日志记录的地方,如果我添加 LogLevel 文件管理器(注释掉),我可以让它工作。我需要通过 appsettings 工作。
host.ConfigureLogging(
loggingBuilder =>
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
loggingBuilder.AddApplicationInsights();
loggingBuilder.AddSerilog(logger, dispose: true);
//loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Trace);
}
);
这是我的应用设置:
"Serilog": {
"AllowedHosts": "*",
"Enrich": [ "WithMachineName" ],
"MinimumLevel": {
"Default": "Verbose",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"fileSizeLimitBytes": "1048576",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact , Version=1.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10",
"path": "c:\\LogFiles\\Publisher\\Test1\\_log.txt",
"retainedFileCountLimit": null,
"rollingInterval": "Day",
"rollOnFileSizeLimit": "true"
}
},
{
"Name": "ApplicationInsights",
"Args": {
"restrictedToMinimumLevel": "Verbose",
"telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
}
}
]
},
【问题讨论】:
-
先生有进展吗?如果您觉得我下面的帖子对您有帮助,您可以接受它作为答案吗?
-
@TinyWang 这就是我所做的,但它不起作用。我只在 ApplicaitonSights 中看到警告、错误和严重记录。我可以强制它工作,但在代码中添加它: loggingBuilder.AddFilter
("", LogLevel.Trace);我需要它从 appsettings 工作。我的 appsettings 好像和你一样。 -
我用代码和配置示例更新了问题。此外,我注意到我确实看到了 Microsoft 库记录的详细级别消息(在 Microsoft.EntityFrameworkCore.Infrastructure 中),只是在我记录它们时没有。
-
我认为这是因为您的代码覆盖了应用设置。我记得代码中的配置比 appsetting 中的配置高。我看到你的appsetting中没有instrumentkey,你能把你的program.cs改成我下面贴的吗?在我的测试过程中,我还发现了许多关于 config serilog 的文档,但只有我在下面发布的内容成功。我也想不出只有那个配置才能工作的原因。我想你也可以创建一个空的 asp.net core mvc 项目并复制我的代码进行测试(只替换仪器密钥)。
-
appinsights 部分中有一个仪器键。记录器得到它,否则什么都不会记录(我可以在调试器中看到它)。
标签: azure-application-insights serilog