在我们的 C# 应用程序中,我们将文件写入Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
. 我们的 log4net 日志文件也应该去那里,所以我们定义application.conf
如下:
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<appendToFile value="true"/>
<file value="%USERPROFILE%\My Documents\MyApp\log.txt"/>
...snip...
</appender>
这有效,直到我们在具有非英语 Windows 的 PC 上运行。因为那时,SpecialFolder.MyDocuments
指向文件夹Mijn Documenten
,而日志仍然指向My Documents
. 混乱随之而来,因为现在我们的文件在两个地方。
我想将我的日志写入“真实的”我的文档文件夹。我该怎么做呢?
- 我试图找到一个类似的环境变量
%USERPROFILE%
,但我的文档似乎不存在一个环境变量。 - 有一个注册表项定义了“我的文档”的真实位置,但无法从
application.conf
. 我试图以
File
编程方式覆盖我的 appender 的参数,如下所示:public static void ConfigureLogger() { XmlConfigurator.Configure(); Hierarchy hierarchy = (Hierarchy)log4net.LogManager.GetRepository(); foreach (var appender in hierarchy.Root.Appenders) { if (appender is FileAppender) { var fileAppender = appender as FileAppender; var logDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "MyApp"); var pathElements = fileAppender.File.Split(Path.DirectorySeparatorChar); var logFileName = pathElements.Last(); var fullLogFilePath = Path.Combine(logDirectory, logFileName); fileAppender.File = fullLogFilePath; } } }
这也不起作用:当我检查记录器的内部时,该
File
属性会愉快地报告Mijn Documenten
,但与此同时,日志仍然会转到My Documents
.
我的想法不多了!