在我们的 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
访问。 我试图以编程方式覆盖我的 appender 的
File
参数,如下所示: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
,但与此同时,日志仍然存在到我的文档
。
我的想法已经用完了!
最佳答案
换行
<file value="%USERPROFILE%\My Documents\MyApp\log.txt"/>
到
<file type="log4net.Util.PatternString" value="%envFolderPath{MyDocuments}\MyApp\log.txt" />
关于c# - Log4net 输出到我的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18364691/