代码之家  ›  专栏  ›  技术社区  ›  simone.tino

ASP。NET Core在所有日志条目中包含时间戳

  •  13
  • simone.tino  · 技术社区  · 7 年前

    我有一个ASP。启用内置控制台日志记录的NET Core 2.0应用程序。以下是WebHost创建:

    var webHost = WebHost.CreateDefaultBuilder(args)
                .UseUrls("http://localhost:5002")
                .UseStartup<Startup>()
                .UseApplicationInsights()
                .Build();
    
    webHost.Run();
    

    发送HTTP POST请求时,将生成以下日志消息并在控制台stdout中显示:

    info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 POST http://localhost:5002/api/sample application/json 2144
    info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method MyApp.Controllers.SampleController.Post (Model.Solve) with arguments (MyApp.Request.MyRequest) - ModelState is Valid
    info: Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor[1]
      Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext.
    info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action MyApp.Controllers.SampleController.Post (MyApp) in 1201.9411ms
    info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 1446.1907ms 200 application/json; charset=utf-8
    

    作为投入生产的一项要求,我需要所有日志条目都包含一个时间戳:现在,我知道我可以在调用log()方法时自己提供时间戳,如中所述 this open issue on the GitHub ASP.NET Logging repository 但是,我应该如何在WebHost直接生成的日志消息上执行此操作(如上面所示)? 是否有一种方法可以添加时间戳,而不必像中建议的解决方案那样重写完整的自定义记录器 this StackOverflow answer ?

    谢谢

    2 回复  |  直到 7 年前
        1
  •  16
  •   Eugene Kulabuhov    4 年前

    如链接问题所示,此功能现已内置于Microsoft。扩展。日志记录。安慰您可以通过设置时间戳格式来激活它:

      new ServiceCollection()
         .AddLogging(opt =>
         {
             opt.AddConsole(c =>
             {
                c.TimestampFormat = "[HH:mm:ss] ";
             });
        })
    
        2
  •  7
  •   McGuireV10    7 年前

    使用第三方解决方案是正确的答案。

    explained 在您链接的关于内置日志记录的同一github讨论中:

    这实际上是一个日志抽象,默认接收器非常基本,通常会分发给其他系统以获得更多功能。

    有这么多令人惊叹的第三方日志记录系统,其功能比我们将提供的OOTB更丰富。我建议您在生产应用程序中使用这些。

    我强烈建议(也是在github问题中)考虑一个维护良好的结构化日志记录包,如 Serilog

    我相信您链接的自定义代码可能很好,但Serilog有许多贡献者,您可以确保它在未来很长时间内都是最新的。主页将链接到特定于ASP的扩展。NET岩芯测井。(我对该产品没有任何既得利益,但我确实使用它,它很容易设置和使用,而且非常灵活。)

    结构化日志记录允许您向日志中添加任意JSON数据,这与我们以前所做的简单“编写字符串”日志记录相比,在故障排除过程中是一个巨大的好处。