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

时间:2017-08-01 09:55:04

标签: datetime logging .net-core

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

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

同样用于记录我使用方法Microsoft.Extensions.Logging.LoggerExtension的{​​{1}}类 这是一个登录我的应用程序的例子:

Log...

其中_logger.LogInformation(eventId, "Action is started."); _logger类的实例,并在具有内置依赖项注入的类构造函数中初始化。 作为调用上述方法的结果,控制台输出显示以下字符串:

ILogger<T>

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

是否存在某些方法或additioanl classes-formatters,它们允许在控制台输出中显示操作日期时间而不将其作为消息的一部分传递给方法?

3 个答案:

答案 0 :(得分:9)

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

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

我写了一个custom console logger来自动记录时间戳并做其他有用的技巧:

[2017.06.15 23:46:44] info: WebHost[1]      Request starting HTTP/1.1 GET http://localhost:6002/hc

答案 1 :(得分:0)

此功能已添加到Microsoft.Extensions.Logging.Console的版本3中(当前是preview,具有dotnet核心3)带来了此功能(这里是pr)。您可以通过设置TimestampFormat来激活它:

  new ServiceCollection()
     .AddLogging(opt =>
     {
         opt.AddConsole(c =>
         {
            c.TimestampFormat = "[HH:mm:ss] ";
         });
    })

答案 2 :(得分:0)

.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...