为 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
会根据项目根路径进行构建
考虑这个 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
会根据项目根路径进行构建