【问题标题】:Serilog not creating log file on production serverSerilog 不在生产服务器上创建日志文件
【发布时间】:2021-04-28 19:06:45
【问题描述】:

我创建了一个 C# .net5.0 控制台应用程序,并且在测试期间 Serilog 一直在正常工作,登录到控制台和文件(相同的文件夹;path="log.txt")。但是,当我在我们服务器上的应用程序上运行时,控制台和文件日志接收器都不起作用!我现在假设问题不在于接收器本身,而是 Serilog 没有实际工作。

我已尝试启用自我日志:

Serilog.Debugging.SelfLog.Enable(msg =>
    Console.WriteLine(msg)
);

但即使在我的开发环境的调试器中运行,Console.WriteLine(msg) 行也不会被调用!

我的appsettings.json如下:

{
"Serilog": {
    "MinimumLevel": {
        "Default": "Debug",
        "Override": {
            "Microsoft": "Information",
            "System": "Information"
        }
    },
    "WriteTo": [
        {
            "Name": "Console",
            "Args": {
                "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
                "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {NewLine}{Exception}"
            }
        },
        {
            "Name": "File",
            "Args": {
                "path": "log.txt",
                "rollingInterval": "Infinite",
                "outputTemplate": "{Timestamp:HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}",
                "shared": false
            }
        }
    ],
    "Enrich": [ "FromLogContext" ]
},

"Database": {
    "Server": "(local)",
    "Database": "ActivbaseLive"
},

"Email": {
    "SmtpHost": "localhost",
    "SmtpPort": 25,
    "SmtpSecurityOption": "None",
    "SmtpUsername": null,
    "SmtpPassword": null,
    "SmtpSender": "\"Activbase Learning Platform\" <noreply@activbase.net>"
}
}

我尝试过绝对路径(在appsettings.json 中使用双反斜杠)。 我已经尝试预先创建日志文件(例如log.txtlog200428.txt)并将权限设置为Everyone Full Control,但是这些更改都没有解决问题,他们也没有解释为什么控制台接收器也不写.

这是在启动期间如何配置 Serilog,这是我怀疑问题所在(即使它在开发环境中工作):

return Host.CreateDefaultBuilder()
    .ConfigureLogging(logging =>
    {
        logging.ClearProviders();
    })
    .UseSerilog((hostContext, loggerConfiguration) =>
    {
        loggerConfiguration.ReadFrom.Configuration(hostContext.Configuration);
    })
    .ConfigureAppConfiguration((hostContext, builder) =>
    {
        builder.AddEnvironmentVariables();
    })
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
        ...
    });
}

你知道为什么 Serilog 不能在生产环境中工作吗?

【问题讨论】:

  • 在您尝试的基础上,接下来我会做这 4 件事: 1. 在文件夹级别专门为应用程序运行的用户设置权限 2. 启动控制台应用程序管理员模式 3. 检查 windows 事件查看器的应用程序日志 => 运行、CMD、eventvwr.msc。系统方面的错误应该出现在那里 4. 如果某些侵入性防病毒软件正在运行,请检查对 serilog.dll 的访问是否被阻止。
  • 现在正在发生非常相似的挫败感,想知道到底该如何解决
  • 这个问题有解决方案吗?我已经尝试了所有建议,但仍然没有任何运气可以写出日志文件。
  • @Rushman 自从我发布此查询以来我已经继续前进,但我认为您应该检查您是否有日志文件的绝对路径以及 IIS 用户帐户是否具有读/写权限建议在这里。

标签: serilog serilog-sinks-file


【解决方案1】:

您提供的路径应该是绝对的。 像这样的东西:

"path": "E:/wwwroot/QA/BackgroundWorkerService/Logs/logFile_.log"

即使我有同样的问题,上述修复对我来说也很好......

【讨论】:

    【解决方案2】:

    对于在 IIS 中运行的 api 应用程序:我必须为 IIS_IUSRS 的日志文件夹分配以下权限。我不需要绝对路径!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多