2016-11-29 116 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我不確定這是我的。所以我沒有鏈接給你。