WPF应用App.config中%DOCUMENTS%环境变量失效,求Serilog日志路径配置
WPF用Serilog写日志的路径问题解答
问题情况
我做了个WPF应用,想用Serilog把日志写到本地TXT里,已经装了Serilog、Serilog.Sinks.File和Serilog.Settings.AppSettings这几个包。结果启动关闭工具后找不到日志文件,怀疑是环境变量路径设错了。
一开始在App.xaml.cs的构造函数里写了这段代码:
Log.Logger=new LoggerConfiguration().ReadFrom.AppSettings().CreateLogger(); Log.Information("##########################################################"); Log.Information("############## Tool started...###############"); Log.Information("##########################################################");
App.config里的配置是这样的:
<appSettings> <add key="serilog:minimum-level" value="Verbose" /> <add key="serilog:using:File" value="Serilog.Sinks.File" /> <add key="serilog:write-to:File.path" value="%DOCUMENTS%\Logs\Tool-.txt" /> <add key="serilog:write-to:File.rollingInterval" value="Day" /> <add key="serilog:write-to:File.retainedFileCountLimit" value="10" /> </appSettings>
后来把路径改成%USERPROFILE%\Documents\ESI_Effort_A350\Logs\ESIA350-.txt就生效了,但想知道有没有直接指向Documents文件夹的环境变量。
相关说明
为啥
%DOCUMENTS%不行?
Windows系统里根本没有%DOCUMENTS%这个标准系统环境变量,Serilog的文件接收器识别不了这个非标准变量,自然解析不对路径,日志文件就生成不了。能直接指向Documents的标准环境变量
%USERPROFILE%\Documents:这是所有Windows系统都支持的标准写法,也是你已经验证能用的,靠谱得很。%PUBLIC%\Documents:如果要写公共文档文件夹(所有用户都能看到),可以用这个变量。%LOCALAPPDATA%\Documents:有些系统里有这个变量,指向当前用户的本地文档目录,不过兼容性不如上面那个。
另一种靠谱写法:代码里直接拿路径
要是不想依赖环境变量,也可以直接在代码里用.NET的API获取Documents路径,再配置Serilog,这样完全不会有解析问题:var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var logPath = Path.Combine(documentsPath, "Logs", "Tool-.txt"); Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.File(logPath, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 10) .CreateLogger();
内容的提问来源于stack exchange,提问作者AoLiGei
相关产品推荐
相关产品推荐

