无法让控制台日志记录在.net core 2.0中运行

时间:2018-05-07 20:30:41

标签: c# .net console .net-core

我有以下代码:

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"
      }
    }
  }
}

但没有任何内容记录到控制台,但我确实在调试日志中输出,所以我缺少什么?

我已经确认它找到了配置文件,所以这不是问题!

2 个答案:

答案 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