Windows-Service中的Serilog不写入日志文件

问题描述 投票:14回答:6

我在TopShelf服务中使用Serilog,登录到控制台和滚动文件。在控制台中运行服务时,我的消息将写入日志文件,但是当我安装服务并运行它时,不会发生日志记录。我需要配置什么特别的东西吗?该文件将写入“。\ logs \ log- {date} .txt”下的二进制文件夹。

最好的问候Gope

windows-services topshelf serilog
6个回答
21
投票

我有一个非常相似的问题。就我而言,问题在于相对路径。我只需要指定绝对路径。现在它就像一个魅力。

WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\log-{Date}.log")

希望能帮助到你!


10
投票

我们遇到了同样的问题,这是我们发现的:

  • Serilog配置为滚动日志文件并写入Seq
  • 可启用日志已启用。

症状 - 没有创建日志文件 - 没有日志写入Seq。

根据@ gdoten的评论,我们的日志文件被写入\ windows \ syswow64(服务作为localservice运行)。 我们认为这些文件的权限可能不允许读取持久的假脱机文件,导致没有日志写入Seq。

修复是硬编码rollinglogfile和缓冲区的路径。


7
投票
 loggerFactory.AddFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log-{Date}.txt"));

尝试这个,它在我的ASP.NET核心2应用程序运行作为Windows服务


3
投票

运行服务的帐户很可能缺少写入日志文件位置的权限。尝试将日志文件位置更改为系统的临时文件夹,以查看是否是这种情况。

如果仍然失败,使用Serilog的SelfLog获取异常信息是最好的选择。


0
投票

我作为Windows服务运行,这是我的json文件。

{
    "Serilog": {
        "MinimumLevel": "Debug",
        "WriteTo": [
          {
            "Name": "RollingFile",
            "Args": {
              "pathFormat": "C:\\Program Files\\mycomp\\myapp\\logs\\log-{Date}.txt"
          }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId", "WithEnvironmentUserName", "WithProcessId" ],
    "Properties": {
      "Application": "MyApp",
      "Environment": "Development"
}

} }

-Gina


0
投票

我有一个类似的问题,它最终因为以下代码,

public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();

代码指定appsettings.json文件,并且在该文件中它具有serilog的配置设置,但是当在服务中运行时,当前文件夹不指向可执行文件文件夹。所以它找不到文件appsettings.json,然后当然serilog不会按预期工作。

只需要更改代码,如下所示将使其工作

public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile(AppDomain.CurrentDomain.BaseDirectory + "\\appsettings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();
© www.soinside.com 2019 - 2024. All rights reserved.