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

时间:2015-06-10 19:37:21

标签: windows-services serilog

考虑这个app.config appSetting条目:

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

这是在app启动时完成的:

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}在哪里,可以放在文件路径中,记录?)

2 个答案:

答案 0 :(得分:6)

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

尝试:

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

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

答案 1 :(得分:0)

把这个放在创建 LoggerConfiguration 之前:

Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;

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