【发布时间】:2020-02-01 07:05:22
【问题描述】:
我遇到一种奇怪的情况,除非附加了调试器(即使我在调试配置中运行),否则我无法从 ASP.NET Core ILogger<T> 接收任何跟踪。首先让我解释一下:
我需要按日期将日志写入文件,我之前为此编写了一个简单的自定义 TraceListener,所以我认为我可以在不编写新的 Log Provider 的情况下重用它:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddTraceSource("IISLogCleaner");
// I added below line to make sure I am not missing anything
logging.SetMinimumLevel(LogLevel.Trace);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
在Startup.ConfigureServices()中,我添加了监听器:
var listener = new DailyTraceListener(folder);
Trace.Listeners.Add(listener);
现在是记录后台任务:
ILogger<CleanupTask> logger;
public CleanupTask(ILogger<CleanupTask> logger)
{
this.logger = logger;
}
// ...
async Task<int> WorkAsync(CancellationToken token)
{
System.Diagnostics.Debug.WriteLine("Start Working");
this.logger.LogInformation("Start working");
await Task.Delay(1000);
this.logger.LogInformation("Work finished");
return await Task.FromResult(10000);
}
问题出在:附加调试器后,所有日志都写入日志文件。但是,当我选择 Run without Debugging 时,即使在 Debug 配置中,也没有创建文件,没有写入内容,直到我添加了 Debug.WriteLine 调用,现在只有这些行被记录,但所有 logger.LogInformation() 都没有被记录.
但是,输出窗口接收所有消息:
为了安全起见,我删除了appsettings.Development.json 文件,只剩下appsettings.json。以下是日志内容:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
【问题讨论】:
标签: c# .net asp.net-core logging trace