log4net日志文件在哪里?

ViV*_*ViV 5 c# log4net

我有一个Windows窗体应用程序,它使用log4net写入日志文件.app.config文件中的日志文件路径定义为:

<file type="log4net.Util.PatternString" value="Logs/LogFileName" />.
Run Code Online (Sandbox Code Playgroud)

我有一个msi安装项目,安装上面的应用程序.我在开发机器上安装App,运行已安装的App,并按预期在目录InstallDirectory/Logs /下写入日志文件.开发机器具有Win XP SP3,具有所有读写权限.

但是,当我在具有Windows 7且我不确定权限的测试计算机上安装相同内容时,没有"Logs"目录,也没有日志文件.

在这两种情况下,InstallDirectory都是C:\ Program Files\Dir1\Dir2.

当我试图找出文件的位置时,在测试机器上添加:

log4net.Appender.FileAppender rootAppender = (log4net.Appender.FileAppender)((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root.Appenders[0];
string filename = rootAppender.File;
MessageBox.Show(filename);
Run Code Online (Sandbox Code Playgroud)

对于代码,有人可以请一些亮点.

  • 为什么文件丢失了?
  • Win 7是否有任何不同的方法来处理Windows安装的驱动器中的新文件?

Mer*_*ham 8

正如其他人所说,不要以管理员身份运行来解决这个问题.写入您有权访问的文件夹/文件.

您可以在配置中展开环境变量以获取特殊文件夹:

https://web.archive.org/web/20121226213809/http://www.l4ndash.com/Log4NetMailArchive/tabid/70/forumid/1/postid/16299/view/topic/Default.aspx

(或者,正如Jon Skeet在这个问题的删除帖子中所推荐的那样,这篇文章更通用:我应该在哪里编写程序数据而不是程序文件?)

尝试:

${LocalAppData}/MyProgram/Logs/Filename
Run Code Online (Sandbox Code Playgroud)

要不就:

${AppData}/MyProgram/Logs/Filename
Run Code Online (Sandbox Code Playgroud)

至于选择这两个中的哪一个 - 我不确定"漫游"是什么,所以我不知道你为什么喜欢AppData或者LocalAppData.可能值得一个不同的问题:)


Dar*_*rov 6

这是一个权限问题.在Windows 7标准中,用户无法写入Program Files目录.因此,如果您没有以管理员身份运行应用程序,则Log4Net无法创建此子目录.您必须Logs/LogFileName在安装应用程序时向目录中的任何人授予写入权限,或将日志文件放在相应的c:\users\username\Application Data\AppName文件夹中.