考虑这个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}在哪里,可以放在文件路径中,记录?)
答案 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
。