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

Gle*_*ten 4 windows-services serilog

考虑这个app.config appSetting条目:

<add key="serilog:write-to:RollingFile.pathFormat"
 value="ServerServiceApp-{Date}.log" />
Run Code Online (Sandbox Code Playgroud)

这是在app启动时完成的:

Log.Logger = new LoggerConfiguration()
    .ReadFrom.AppSettings()
    .Enrich.WithThreadId()
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

这是在Windows服务应用程序中.日志文件最终在这里:

C:\Windows\SysWOW64
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果我们能说出类似的话会很棒:

<add key="serilog:write-to:RollingFile.pathFormat"
 value="{ApDomainBaseDirectory}\ServerServiceApp-{Date}.log" />
Run Code Online (Sandbox Code Playgroud)

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

小智 10

只需将其放在创建 LoggerConfiguration 之前即可:

Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
Run Code Online (Sandbox Code Playgroud)

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


Nic*_*rdt 6

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

尝试:

<add key="serilog:write-to:RollingFile.pathFormat"
     value="%PROGRAMDATA%\ServerService\Logs\log-{Date}.txt" />
Run Code Online (Sandbox Code Playgroud)

(Program Files通常被认为是只读的,在这里写东西会导致在卸载过程中意外地留下奇怪的东西.)

  • 如果我更愿意将日志文件放在部署目录(= 运行时目录)的子文件夹中怎么办? (3认同)