我正在关注这篇文章: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1
我试图仅将自己的自定义日志记录在asp.net core 3.1 API中。并不是从asp.net核心生成的所有日志。我创建了一个空白天气预报服务:
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogTrace("LogTrace");
_logger.LogDebug("LogDebug");
_logger.LogInformation("LogInformation");
_logger.LogError("LogError");
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Trace",
"TestAPI": "Trace"
},
"ApplicationInsights": {
"InstrumentationKey": "xx-xx-x-x-xx",
"LogLevel": {
"Default": "Trace",
"Microsoft": "Trace",
"TestAPI": "Trace"
}
}
},
"AllowedHosts": "*"
}
我安装了两个版本2.14.0以下的nuget: Microsoft.Extensions.Logging.ApplicationInsights Microsoft.ApplicationInsights.AspNetCore
现在,我尝试运行该应用程序,但没有任何日志。
我尝试添加services.AddApplicationInsightsTelemetry();启动:
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetry();
services.AddControllers();
}
没有日志。
答案 0 :(得分:1)
首先,请注意,ApplicationInsights
键的含义取决于JSON文件中的位置,有两种截然不同的含义。
如果密钥位于JSON根级别(即您所谓的“外部”),则用于配置Application Insights,并在其中指定检测密钥。看起来像这样:
{
"ApplicationInsights": {
"Instrumentationkey":"xxx-36a5-4687-b1fc-xxxxxx"
}
}
第二,如果它位于Logging
部分中,则用于配置ApplicationInsightsLoggerProvider
,它确定将哪个日志级别发送到Application Insights。这就是ILogger
log filtering机制。
默认情况下,仅日志级别warning
或更高级别的日志被发送到应用数据分析。如果只想将所有日志发送给应用程序见解,则可以为您的命名空间配置它,或者忽略来自System
和Microsoft
命名空间的消息:
{
"Logging": {
"ApplicationInsights": {
"LogLevel": {
"Default": "Trace"
"System": "None",
"Microsoft": "None"
}
}
}
答案 1 :(得分:0)
首先,无需将这些提供程序设置放在“日志记录”之外(您不应该)。
您想要的每个日志记录设置都只能放在内部(除非配置了提供程序来专门读取该设置)
现在要回答您的问题,假设您的应用程序的根名称空间是MyNetCore
。 (与项目名称相似)。
如果使用的是Visual Studio,则可以从“项目属性”->“应用程序”->“默认命名空间”中查看项目的根名称空间
要仅从应用程序查看日志,必须将默认日志记录级别设置为None
,并将项目MyNetCore
的日志记录级别设置为Trace
[编辑:您已分别设置ApplicationInsights
(或任何其他提供程序)的日志记录级别。默认值为kestrel
。]
"Logging": {
"LogLevel": {
"Default": "None",
"MyNetCore": "Trace"
},
"ApplicationInsights": {
"InstrumentationKey": "xxx-36a5-4687-b1fc-xxxxxx",
"LogLevel": {
"Default": "None",
"MyNetCore": "Trace"
}
}
}
此处设置的日志记录级别为
minimum
级别。
如果将其设置为跟踪(0),将显示所有日志级别(大于0)。即从Information
到Critical
如果将其设置为“无”(6),则不会显示任何日志
参考不同的日志级别:https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.loglevel
如果您只想查看来自asp.net核心的错误以及应用程序中的每个日志级别,则可以执行此操作。
"Logging": {
"LogLevel": {
"Default": "None",
"Microsoft": "Error",
"MyNetCore": "Trace"
},
"ApplicationInsights": {
"InstrumentationKey": "xxx-36a5-4687-b1fc-xxxxxx",
"LogLevel": {
"Default": "None",
"Microsoft": "Error",
"MyNetCore": "Trace"
}
}
}
编辑:要阅读上面的ApplicationInsights
配置,您需要安装Microsoft.Extensions.Logging.ApplicationInsights nuget软件包。否则,配置将被完全忽略。