控制台日志中的日期和时间

Wou*_*ter 4 asp.net-core

他们是在生产和开发环境的 asp.net core 2.0 项目的控制台日志中提及日期和时间的方法吗?

我的启动中有以下内容:

services.AddLogging(builder =>
{
            builder.AddConfiguration(Configuration.GetSection("Logging"+Environment.EnvironmentName))
                    .AddConsole()
                    .AddDebug();
});
Run Code Online (Sandbox Code Playgroud)

应用程序设置.json:

"LoggingDevelopment": {
    "IncludeScopes": false,
    "Console": {
      "LogLevel": {
        "Default": "Debug",
        "System": "Information",
        "Microsoft": "Information"
      }
    }
  },
  "LoggingProduction": {
    "IncludeScopes": false,
    "Console": {
      "LogLevel": {
        "Default": "Error",
        "System": "Error",
        "Microsoft": "Error"
      }
    }
  },
Run Code Online (Sandbox Code Playgroud)

当前的[开发]日志布局(没有日志行的日期或时间):

info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action a.Controller (project) in 531.2457ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 532.5812ms 200 text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

在生产模式下,日期和时间对于错误行来说非常方便。

Cod*_*ler 6

默认控制台记录器非常有限。当然,总是可以使用 lambda 格式化程序,如 serpent5 提供的 Github 问题中所述。但只有使用原始ILogger.Log()方法才能访问它。它不适用于或 之ILogger类的扩展。如果您不控制日志记录调用,则此选项也不可用。当日志记录由 ASP.NET Core 内部类完成时,这实际上是您的情况。LogInformationLogError

因此,您需要一些更灵活的 .Net Core 记录器实现。我建议使用 Serilog。它非常简单,但同时非常灵活和强大。

要将 Serilog 集成到 ASP.Net Core 应用程序中,请执行以下操作:

  1. 安装以下 NuGet 包:

    Serilog.AspNetCore

    Serilog.Sinks.Console

    除了控制台之外,Serilog 还支持许多其他目标,例如滚动文件、电子邮件、SQL Server 等。请参阅其他Serilog 目标的列表。

  2. 在应用程序启动时配置 Serilog:

这是一个示例:

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}")
            .CreateLogger();

        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog()
            .Build();
}
Run Code Online (Sandbox Code Playgroud)

提供的输出模板将日期和时间添加到记录的消息中:

在此输入图像描述

  • 当然。例如,您可以在 `appsettings.{env.EnvironmentName}.json` 中指定此差异,并将值传递给上面示例中的 `MinimumLevel.Override("Microsoft", LogEventLevel.Information)` 调用。Serilog 还支持从文件加载整个配置。检查详细信息:https://github.com/serilog/serilog-settings-configuration (2认同)