28

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

最好的问候戈佩

4

7 回答 7

44

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

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

希望能帮助到你!

于 2015-05-05T10:11:43.507 回答
12

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

  • Serilog 配置为滚动日志文件和写入 Seq
  • 启用了 Ddrable 日志。

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

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

修复是硬编码滚动日志文件和缓冲区的路径。

于 2016-03-24T05:16:05.013 回答
9
 loggerFactory.AddFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log-{Date}.txt"));

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

于 2018-02-01T21:32:12.667 回答
4

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

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

于 2014-10-27T21:47:30.973 回答
2

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

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();
于 2019-04-11T21:56:31.713 回答
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"
        }
    }
}
于 2019-01-17T00:20:11.217 回答
-1

你也可以使用这样的东西(当你想创建一个 Windows 服务和 Serilog 时):

var builder = new ConfigurationBuilder()
           .AddJsonFile($@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\appsettings.json", optional: true, reloadOnChange: true)
           .AddEnvironmentVariables();
于 2020-02-18T08:53:58.527 回答