Linux 运行 时 Serilog 未创建日志文件

Serilog not creating log file when running on Linux

当 运行 ASP.NET Core 应用程序在 Linux[=29 上时,我无法启用日志记录=].我正在使用 Serilog.Sinks.File(但也尝试使用 RollingFile),并在 appsettings 中定义了以下配置:

"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": {
  "Default": "Debug",
  "Override": {
    "Microsoft": "Warning",
    "System": "Warning"
  }
},
"WriteTo": [
  {
    "Name": "File",
    "Args": { "path": "core_log.log", "rollingInterval": "Day" }
  }
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
  "Application": "CORE service"
}  }

我也尝试使用 pathFormat 与 RollingFile 接收器一起使用,但没有成功。无论我尝试什么,应用程序都没有创建日志文件。

我还尝试了多种路径变体,例如:/var/test/app/core_log.log 或只是 core_log.log,但我在任何地方都看不到文件。我尝试使用以下方式搜索它:

sudo find / -name '*.log' -print | grep core_log

值得一提的是,当 运行 在 Windows 上使用相同的应用程序时,一切正常,我可以看到创建的日志文件。

有人在 Linux 上遇到过类似的 Serilog 问题吗?会不会跟特权有关?

刚刚解决了此配置的相同问题:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            Log.Logger = new LoggerConfiguration()
                .WriteTo
                .File(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs/.log"), rollingInterval: RollingInterval.Day)
                .CreateLogger();
        })
        .ConfigureLogging((hostingContext, logging) =>
        {
            logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
            logging.AddSerilog(dispose: true);
        })
        .UseStartup<Startup>();

特别注意AppDomain.CurrentDomain.BaseDirectory。这将指向您的 Linux 部署文件夹。我想也可以从配置文件中读取文件夹。

我还必须手动创建文件夹,正如 Nicholas 所指出的(谢谢!,不仅如此),但不是文件。