如何在serilog中将日志写到Linux和Windows上的相同路径?

问题描述 投票:0回答:1

我有一个通过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
        }
      }
    ]
  },
.net-core serilog
1个回答
0
投票

您可以做的是以下事情:

  1. 创建两个appsettings文件,其中一个应为默认文件,第二个应为appsettings.Linux.jsonenter image description here

  2. 根据运行应用程序的操作系统,读取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中为记录器设置不同的值

© www.soinside.com 2019 - 2024. All rights reserved.