我有以下代码:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
Configuration = builder.Build();
var serviceProvider = new ServiceCollection()
.AddLogging(loggingBuilder => loggingBuilder.AddConfiguration(Configuration.GetSection("Logging"))
.AddConsole()
.AddDebug())
.AddSingleton<IEngine, Engine>()
.BuildServiceProvider();
var engine = serviceProvider.GetService<IEngine>();
await engine.RunAsync();
和
public class Engine : IEngine
{
private readonly ILogger<Engine> logger;
public Engine(ILoggerFactory loggerFactory)
{
logger = loggerFactory.CreateLogger<Engine>();
}
public async Task RunAsync()
{
logger.LogError("Test");
logger.LogTrace("Starting engine!");
}
}
然后我有以下配置
{
"Logging": {
"IncludeScopes": false,
"Console": {
"LogLevel": {
"Default": "Trace",
"System": "Information",
"Microsoft": "Information"
}
}
}
}
但没有任何内容记录到控制台,但我确实在调试日志中输出,所以我缺少什么?
我已经确认它找到了配置文件,所以这不是问题!
答案 0 :(得分:3)
好吧看来.net core 2.0在打印到控制台之前有一段延迟。
所以它正在工作我只是不等它冲洗!
答案 1 :(得分:0)
如果保留记录器的实例,则可以执行以下操作,而不是调用Thread.Sleep并等待记录器完成:
logger.Dispose()
强制记录器在应用程序关闭之前刷新(输出)其缓存。
如果记录器绑定到IContainer或ServiceProvider,则应该能够对它们进行Dispose()来达到相同的效果。
https://github.com/serilog/serilog-extensions-logging-file/issues/16