使用.Net Core Console 记录器记录事件日期时间

问题描述 投票:0回答:4

我正在使用日志记录到内置于 .Net Core 框架的控制台输出。 这里是记录器的初始化:

var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton(new LoggerFactory()
                    .AddConsole());

对于日志记录,我正在使用

Microsoft.Extensions.Logging.LoggerExtension
的类和方法
Log...
这是登录我的应用程序的示例:

_logger.LogInformation(eventId, "Action is started.");

其中

_logger
ILogger<T>
类的实例,并在类构造函数中使用内置依赖注入进行初始化。 调用上述方法的结果控制台输出显示以下字符串:

info: NameSpaceName.ClassName[eventId] Action is started.

我想在执行 Log 方法时在控制台输出中显示日期时间,该输出指向时间,但 Log.. 方法似乎不包含任何允许显示日期时间的方法。

是否存在某种方法或附加类格式化程序,允许在控制台输出中显示操作日期时间,而不将其作为消息的一部分传递给方法?

datetime logging .net-core
4个回答
51
投票

该功能已添加到

Microsoft.Extensions.Logging.Console
的第3版中(这里是pr)。您可以通过设置
TimestampFormat
:

来激活此功能
  new ServiceCollection()
     .AddLogging(opt =>
     {
         opt.AddConsole(c =>
         {
            c.TimestampFormat = "[HH:mm:ss] ";
         });
    })

24
投票

对于 ASP.NET Core,您可能更喜欢使用配置文件

appsettings.json
而不是直接将其连接到代码中。

{
  "Logging": {
    "Console": {
      "TimestampFormat": "[yyyy-MM-dd HH:mm:ss] "
    }
  }
}

只要在

Host.CreateDefaultBuilder()
中调用
Program.cs
,即可开箱即用。


17
投票

.NET 5(ASP.NET Core)中的示例:

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(options =>
    {
        options.AddSimpleConsole(c =>
        {
            c.TimestampFormat = "[yyyy-MM-dd HH:mm:ss] ";
            // c.UseUtcTimestamp = true; // something to consider
        });
    });

    // ...
}

输出示例:

[2020-12-13 12:55:44] info: Microsoft.Hosting.Lifetime[0] Application is shutting down...

12
投票

内置 .NET Core 控制台记录器不记录日期时间。跟踪此问题以获取更多详细信息。最简单的解决方法是:

logger.Log(LogLevel.Information, 1, someObj, null, (s, e) => DateTime.Now + " " + s.ToString());

我编写了一个自定义控制台记录器来自动记录时间戳并执行其他有用的技巧:

[2017.06.15 23:46:44] info: WebHost[1]      Request starting HTTP/1.1 GET http://localhost:6002/hc
© www.soinside.com 2019 - 2024. All rights reserved.