2016-11-29 120 views
0

我已经搜索到了广泛的解决方案(包括相关的stackoverflow问题),但还没有找到解决我的问题的答案。我一直在工作项目中成功使用log4net,当我在Visual Studio中运行程序时,我得到了我的日志文件。如果我使用msi安装程序(wix)安装程序,那么我不会得到日志文件。我将首先列出我尝试过的东西,然后是我的代码的编辑版本。log4net在安装时没有创建日志文件

此外,我在任何地方说“appname”我实际上并没有放置appname,只是保持项目名称没有发布。

  1. 我将在$ {} USERPROFILE日志文件\应用程序数据\本地[APPNAME]目录,权限是不是一个问题。

  2. 由于安装版本中存在的配置文件是appname.exe.config而不是app.config,因此我将Assemblyinfo.cs汇编语句更改为appname.exe.config。然而,这并没有解决我的问题,它仍然只能在通过visual studio运行时运行,而安装的版本则不能。

  3. 我修改了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)]却改变这被放置在安装目录和料仓修改后的配置文件名。

内的app.config的(请原谅任何可能的错别字,我的开发机airgapped,我不能复制粘贴代码):

<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#代码,我使用logger:

private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

回答

1

如果你的配置是您的app.config,你可以使用:

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

当你SPE cify文件,log4net期望log4net元素作为xml根元素。对于你的app.config,这不是真的。

+0

谢谢!那样做了,我指定文件的原因是由于我在集成Log4Net时最初做的故障排除。出于某种原因,我没有得到上述声明的日志文件。我可能错过了一些东西,就像现在它在VS中运行并在安装之后运行一样。在其他答案中没有找到的关键信息是log4net,如果您明确指定了assemblyinfo.cs中的配置文件,则需要将log4net元素作为根。 – Josh

+0

彼得,我最近阅读了一篇关于用单个Execute方法(或任何名字)写一个'ICommand'接口的文章,再加上使用装饰器和策略作为实现AOP的手段,但对于我来说,再次找到它。你能为我提供一个链接吗? – ErikE

0

@erike我不确定这是我的。所以我没有链接给你。