Log4net输出到我的文档
在我们的C#应用程序中,我们将文件写入Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
。 我们的log4net日志文件也应该去那里,所以我们已经定义了application.conf
,如下所示:
...snip...
这是有效的,直到我们在具有非英语Windows的PC上运行。 因为那时, SpecialFolder.MyDocuments
指向文件夹Mijn Documenten
,而日志仍然转到My Documents
。 随之而来的是混乱,因为现在我们的文件分布在两个地方。
我想将我的日志写入“真正的”我的文档文件夹。 我该怎么做呢?
- 我试图找到像
%USERPROFILE%
这样的环境变量,但似乎没有My Documents的存在变量。 - 有一个注册表项,用于定义“我的文档”的真实位置,但无法从
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
,但同时日志仍然转到My Documents
。
我的想法已经用完了!
改变线
至
似乎至少有两种方法。 最简单的是一种黑客攻击:
-
指定自定义环境变量以指示log4net配置中的根路径:
-
在启动时,在初始化日志记录之前,请设置此环境变量值:
Environment.SetEnvironmentVariable("MYAPP_USER_ROOTFOLDER", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
这里解释了更复杂但推荐的方法: http : //marc.info/? l = log4net-user&m = 110142086820117&w = 2 ,这里http://ziqbalbh.com/articles/log4net-another-way-to-change-日志文件的位置上运行时/
接受的答案已过时。
你现在应该使用:
(这应该适用于Windows 7,其中“Documents”由别名“My Documents”引用。)
${UserProfile}
将映射到C:\ Users [UserName],即使您没有在环境变量列表中看到此变量显式定义。