代码之家  ›  专栏  ›  技术社区  ›  rjovic

Serilog在Linux上运行时不创建日志文件

  •  12
  • rjovic  · 技术社区  · 6 年前

    我在运行时无法启用日志记录 ASP。净核心 应用于 Linux操作系统 . 我正在使用 Serilog。水槽。文件 (但也尝试了 滚动文件 )使用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"
    }  }
    

    我还尝试了使用RollingFile接收器 路径格式 但没有成功。无论我尝试什么,应用程序都不会创建日志文件。

    我还尝试了多种路径变体,如:/var/test/app/core\u log。日志或只是简单的core\u日志。日志,但我没有看到任何文件。我尝试使用以下方法进行搜索:

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

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

    Linux上的Serilog也有类似的问题吗?这可能与特权有关吗?

    1 回复  |  直到 6 年前
        1
  •  9
  •   DavidC    5 年前

    刚刚修复了此配置的相同问题:

    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所指出的那样,我还必须手动创建文件夹(谢谢你,不仅仅是因为这个),而不是文件。