如何将 serilog 中的日志写入 Linux 和 WIndows 上的相同路径?

How to write logs in serilog to same path on Linux and WIndows?

我有一个通过 appsettings.json 文件配置 Serilog 的应用程序,我在 windows 上开发了该应用程序,但它已部署到 linux。 如何将日志写入相对目录 Logs/logfile.log?

仅更改部署文件夹中的 appsettings.json 是一个不错的选择吗?

现在这是我正在使用的配置:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.MSSQLServer" ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "MinimumLevel": {
      "Default": "Warning",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "outputTemplate": "[{Timestamp:HH:mm:ss} {SourceContext} [{Level}] {Message}{NewLine}{Exception}",
          "theme": "Serilog.Sinks.SystemConsole.Themes.SystemConsoleTheme::Grayscale, Serilog.Sinks.Console"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "Logs\log-.log",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 5
        }
      }
    ]
  },

您可以做的是:

  1. 创建两个 appsettings 文件,一个应该是默认文件,第二个 appsettings.Linux.json

  2. 根据OS应用程序运行读取appsettings文件。

    var env = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ?
    "Linux" : "Windows";
    Configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env}.json", true)
            .AddEnvironmentVariables()
            .Build();
    
  3. 在 appsettings.Linux.json 中为记录器设置不同的值。 对于 Windows:

    "Args":{ "path": "Logs\log-.log", "rollingInterval": "Day", "retainedFileCountLimit": 5 }

对于Linux:

 "Args": {
          "path": "/var/log/appname",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 5
        }