gpt4 book ai didi

c# - .NET Core 2.0 日志记录损坏了吗?

转载 作者:IT王子 更新时间:2023-10-29 04:11:07 25 4
gpt4 key购买 nike

升级到 .NET Core 2.0 (+ASP.NET Core 2.0) 后,我似乎无法获得 Trace 级别的日志信息输出。

事实上,如果我做一个 dotnet new web 项目并在 Startup for Configure 中添加下面的代码,我不会收到任何跟踪或调试日志消息,但我会收到信息和错误消息两次。注释掉 .AddConsole() 调用将仅输出一次这些(信息和错误)——表明它默认使用控制台提供程序自动配置。请记住,这是一个“文件 -> 新建”项目体验,Program.cs 中没有任何用于日志记录或配置的设置 - 除了我添加的内容。有人见过东西吗?或者我应该为它注册一个 GitHub 问题。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Microsoft.Extensions.Logging.LogLevel.Trace);

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.Run(async (context) =>
{
var logger = loggerFactory.CreateLogger("Blah");
logger.LogTrace("Hello world : Trace");
logger.LogDebug("Hello world : Debug");
logger.LogInformation("Hello world : Information");
logger.LogError("Hello world : Error");

await context.Response.WriteAsync("Hello World!");
});
}

最佳答案

配置日志记录的方式发生了一点变化...推荐的方法(在this GitHub issue/announcement中有很好的记录)现在是在AddLogging方法上配置记录器,例如

services.AddLogging(builder =>
{
builder.AddConfiguration(Configuration.GetSection("Logging"))
.AddConsole()
.AddDebug();
});

并且有一个 appsettings.json喜欢

通知

好像有几个人搞糊涂了,因为这个例子只演示了Console的配置提供者而不是所有记录器。

LogLevel部分为所有 namespace ( Default 键)或特定 namespace ( System 覆盖 namespace 以 System.* 开头的所有类日志记录的默认值配置日志级别。

这是用于 T 中的类在ILogger<T> ).这允许为此命名空间的记录器设置高于或低于默认的日志记录级别。

{
"ApplicationInsights": {
"InstrumentationKey": ""
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Information"
},
"Console": {
"LogLevel": {
"Default": "Warning",
"System": "Information",
"Microsoft": "Information"
}
}
}
}

请注意,appsettings.json 的结构与过去在 .NET Core 1.x 中的结构有所不同,并且 Loggingappsettings.json 中输入现在其中包含记录器提供程序名称,它允许您为每个日志记录提供程序配置日志记录级别。

以前,appsettings.json 中的条目将仅适用于控制台记录器。

或者,现在可以在 WebHostBuilder 内移动日志记录反而。

public static void Main()
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;

config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddJsonFile("hosting.json", optional: false)
.AddEnvironmentVariables();
})
.ConfigureLogging((webhostContext, builder) => {
builder.AddConfiguration(webhostContext.Configuration.GetSection("Logging"))
.AddConsole()
.AddDebug();
})
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();

host.Run();
}

更新

如果不想使用 appsettings.json ,也可以在代码中注册过滤器。

services.AddLogging(builder =>
{
builder.AddConfiguration(Configuration.GetSection("Logging"))
// filter for all providers
.AddFilter("System", LogLevel.Debug)
// Only for Debug logger, using the provider type or it's alias
.AddFilter("Debug", "System", LogLevel.Information)
// Only for Console logger by provider type
.AddFilter<DebugLoggerProvider>("System", LogLevel.Error)
.AddConsole()
.AddDebug();
});

关于c# - .NET Core 2.0 日志记录损坏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45781873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com