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

我的想法已经用完了!

改变线

  

  

似乎至少有两种方法。 最简单的是一种黑客攻击:

  1. 指定自定义环境变量以指示log4net配置中的根路径:

  2. 在启动时,在初始化日志记录之前,请设置此环境变量值:

    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],即使您没有在环境变量列表中看到此变量显式定义。