【问题标题】:Log event datetime with.Net Core Console logger使用 .Net Core 控制台记录器记录事件日期时间
【发布时间】:2021-09-19 06:06:59
【问题描述】:

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

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

对于日志记录,我正在使用 Microsoft.Extensions.Logging.LoggerExtensions 类和方法 Log... 这是登录我的应用程序的示例:

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

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

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

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

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

【问题讨论】:

  • 在 NetCore 3.0 中会有这样的配置。

标签: datetime logging .net-core


【解决方案1】:

该功能已添加到 Microsoft.Extensions.Logging.Console 的第 3 版中(这里是 pr)。您可以通过设置TimestampFormat 来激活它:

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

【讨论】:

【解决方案2】:

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

【讨论】:

  • 谢谢。你的图书馆很棒。我刚刚添加了 Nuget 包的链接,删除了对标准日志库的引用,更新了初始化,它按预期工作/
【解决方案3】:

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

【讨论】:

  • 我没有得到的一件事是这不会修改“调试”日志(在 Visual Studio 中找到)。在 VS 中,要查看带有时间戳的日志,您应该将“显示输出来自”修改为 Web 服务器的日志。我不相信有办法在调试日志中添加时间戳,因为 AddDebug 不接受任何参数。
  • 这在 .Net 5 中被标记为已弃用
  • @Matt @StefHeyenrath 弃用的是ConsoleLoggerFormat 而不是这里提到的TimestampFormatdocs.microsoft.com/en-us/dotnet/core/extensions/… 确实指定了“在 .NET 5 中,对自定义格式的支持已添加到 Microsoft.Extensions.Logging.Console 命名空间中的控制台日志中。”
  • @Adarsha 谢谢你的澄清,我不小心做了options.AddConsole 而不是options.AddSimpleConsole
【解决方案4】:

对于 ASP.NET Core,您可能更喜欢使用配置文件 appsettings.json,而不是将其直接连接到代码中。

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

只要在Program.cs 中调用Host.CreateDefaultBuilder(),此方法开箱即用

【讨论】:

猜你喜欢
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多