为 Serilog 滚动文件路径指定目录

Specify directory for Serilog rolling file path

考虑这个 app.config appSetting 条目:

<add key="serilog:write-to:RollingFile.pathFormat"
 value="ServerServiceApp-{Date}.log" />

这是在应用程序启动时完成的:

Log.Logger = new LoggerConfiguration()
    .ReadFrom.AppSettings()
    .Enrich.WithThreadId()
    .CreateLogger();

这是在 Windows 服务应用程序中。日志文件在此处结束:

C:\Windows\SysWOW64

显然,我们宁愿将日志文件放在与该服务的 .exe 所在的同一目录中(客户不希望我们向 SysWOW64 写入内容)。但是怎么办?

我们需要 ReadFrom.AppSettings 以便客户可以根据需要在 app.config 中提供 serilog 设置。

在 ReadFrom.AppSettings 完成后,是否有一些方法可以更改用于日志文件的目录?

如果我们能这样说就太棒了:

<add key="serilog:write-to:RollingFile.pathFormat"
 value="{ApDomainBaseDirectory}\ServerServiceApp-{Date}.log" />

(而{Date}在哪里,可以放在文件路径中,有记录吗?)

服务写入日志的最佳位置是 %PROGRAMDATA%,默认情况下,在 C:\ProgramData\.

尝试:

<add key="serilog:write-to:RollingFile.pathFormat"
     value="%PROGRAMDATA%\ServerService\Logs\log-{Date}.txt" />

Program Files通常被认为是只读的,在这里写东西会导致卸载时意外留下奇怪的东西。)

只需在创建 LoggerConfiguration 之前放置:

Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;

然后File.path会根据项目根路径进行构建