我已經搜索到了廣泛的解決方案(包括相關的stackoverflow問題),但還沒有找到解決我的問題的答案。我一直在工作項目中成功使用log4net,當我在Visual Studio中運行程序時,我得到了我的日誌文件。如果我使用msi安裝程序(wix)安裝程序,那麼我不會得到日誌文件。我將首先列出我嘗試過的東西,然後是我的代碼的編輯版本。log4net在安裝時沒有創建日誌文件
此外,我在任何地方說「appname」我實際上並沒有放置appname,只是保持項目名稱沒有發佈。
我將在$ {} USERPROFILE日誌文件\應用程序數據\本地[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)]
卻改變這被放置在安裝目錄和料倉修改後的配置文件名。
內的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);
謝謝!那樣做了,我指定文件的原因是由於我在集成Log4Net時最初做的故障排除。出於某種原因,我沒有得到上述聲明的日誌文件。我可能錯過了一些東西,就像現在它在VS中運行並在安裝之後運行一樣。在其他答案中沒有找到的關鍵信息是log4net,如果您明確指定了assemblyinfo.cs中的配置文件,則需要將log4net元素作爲根。 – Josh
彼得,我最近閱讀了一篇關於用單個Execute方法(或任何名字)寫一個'ICommand'接口的文章,再加上使用裝飾器和策略作爲實現AOP的手段,但對於我來說,再次找到它。你能爲我提供一個鏈接嗎? – ErikE