【问题标题】:Serilog file name UTC Date formatSerilog 文件名 UTC 日期格式
【发布时间】:2020-11-19 21:47:05
【问题描述】:

我想在 Serilog 文件名中使用 UTC 日期时间。我在我的 appseting.json 文件中使用下面的 serilog 配置。

"Serilog": {
    "Using": [],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [
      "FromLogContext",
      "WithMachineName",
      "WithProcessId",
      "WithThreadId"
    ],
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "Logs\\log-.json",
          "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
          "rollingInterval": "Hour",
          "shared": true
        }
      }
    ]
  }

下面是我用于serilog的program.cs文件代码。

public static void Main(string[] args)
        {

            var configuration = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json").Build();

            Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .CreateLogger();
            try
            {
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception e)
            {
                Log.Fatal(e, "The Application failed to start correctly");
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args).UseSerilog()
                .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });

目前,serilog 生成的日志文件名为 log-2020091323.json,它不是 UTC 日期时间。 我正在使用 asp.net core 3.1。

【问题讨论】:

  • 谢谢,@RubenBartelink。但我需要文件名中的 UTC 日期,而不是文件内容。它可能在文件内容调用 UtcTimestamp 中创建了一个额外的属性。
  • 抱歉选得太快了 - 我想我在搜索中也看到了其中一个预先回答的问题?

标签: c# .net-core asp.net-core-3.1 serilog


【解决方案1】:

您可以使用Install-Package Serilog.Sinks.Map nuget 包并在 Serilog 设置中对其进行配置,以将其存档,如下面的代码示例所示

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    // Ex: UtcDateTime value '202009201010'
    .WriteTo.Map("UtcDateTime", DateTime.UtcNow.ToString("yyyyMMddHHmm")
                    , (UtcDateTime, wt) => wt.File($"logs/log-{UtcDateTime}.txt"))
    .CreateLogger();

Log.Information("Hello, Serilog!");

Log.CloseAndFlush(); // Ex: log file name 'log-202009201010.txt'

此代码每 分钟 将日志保存到新文件,如果您需要为每个 小时 配置它,请使用 DateTime.UtcNow.ToString("yyyyMMddHH"),或在每个 天使用 DateTime.UtcNow.ToString("yyyyMMdd")

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 2021-06-26
    • 1970-01-01
    • 2019-07-27
    • 2023-03-23
    • 2019-04-09
    • 1970-01-01
    • 2021-05-29
    • 2011-04-12
    相关资源
    最近更新 更多