我已经为我的解决方案(包括相关的stackoverflow问题)进行了广泛的搜索,但还没有找到解决我的问题的答案。我一直在工作项目中成功使用log4net,当我在visual studio中运行程序时,我得到了我的日志文件。如果我使用msi安装程序(wix)安装程序,那么我没有得到日志文件。我将首先列出我尝试的内容,然后是我的代码的编辑版本。
此外,在我说“appname”的任何地方,我实际上并未放置appname,只是保留了项目名称。
我将日志文件放在$ {USERPROFILE} \ AppData \ Local [appname]目录中,权限不是问题。
由于安装版本中存在的配置文件是appname.exe.config而不是app.config,因此我将Assemblyinfo.cs程序集语句更改为appname.exe.config。然而,这并没有解决我的问题,它仍然只能在通过visual studio运行时运行,安装版本不会。
我修改了product.wxs,将log4net.dll和log4net.xml传递到安装目录。 (忘记这样做,应用程序无法启动,所以回来并加入)仍然没有变化。
我们使用log4net在一个解决方案中有5个项目。所有assemblyinfo.cs文件都包含以下内容:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "appname.exe.config", Watch = true)]
我正在使用[assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]
,但将其更改为安装目录和bin中的修改后的配置文件名。
在app.config内部(原谅任何可能的拼写错误,我的开发机器被空转,我无法复制粘贴代码):
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="MyAppender"/>
</root>
<appender name="MyAppender" type="log4net.Appender.FileAppender">
<file value="${USERPROFILE}\AppData\Local\appname\appname.log"/>
<appendToFile value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level - %message%newline"/>
</layout>
</appender>
</log4net>
</configuration>
在我使用记录器的c#代码中:
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
答案 0 :(得分:1)
如果您的配置位于app.config中,则可以使用:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
当您指定文件时,log4net期望log4net元素为xml根元素。对于你的app.config,情况并非如此。
答案 1 :(得分:0)
@erike我不确定这是我的。所以我没有给你链接。