2016-11-03 31 views
2

我有一個使用log4net的WPF應用程序。當我在Visual Studio中運行它時,日誌文件按預期在Debug或Release文件夾中創建。當應用程序部署時log4net日誌文件未被寫入

但是,當我創建安裝程序並運行安裝的應用程序時,不會創建日誌文件。我在代碼中添加了以下幾行...

string logFilePath = ((Hierarchy)LogManager.GetRepository()) 
       .Root.Appenders.OfType<FileAppender>() 
       .FirstOrDefault()?.File; 
    using (StreamWriter sw = new StreamWriter(@"d:\log.log")) { 
    sw.WriteLine("Log file: " + logFilePath); 
    } 

...使我能夠檢查日誌文件是否正在寫入我期望的位置。它告訴我日誌文件應該寫入C:\Program Files (x86)\Physio Diary\PhysioDiaryClient.log,這正是我所期望的。

但是,該文件不存在。任何想法爲什麼?

下面是App.config文件的頂部...

<?xml version="1.0" 
     encoding="utf-8"?> 

<configuration> 
    <configSections> 
    <section name="log4net" 
      type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" /> 
    </configSections> 

    <log4net> 
    <appender name="RollingFileAppender" 
       type="log4net.Appender.RollingFileAppender"> 
     <param name="File" 
      value="PhysioDiaryClient.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="2" /> 
     <maximumFileSize value="1MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-7level %logger - %message%newline%exception" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 

文件的底部看起來像這樣...

<startup> 
    <supportedRuntime version="v4.0" 
         sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 

</configuration> 

之間的位都是做與應用程序使用的WCF服務。

任何任何想法?作爲一個測試,我嘗試在App.config中將日誌文件路徑硬編碼到我的D:驅動器(所以它是硬編碼的,並且不存在權限問題),但文件仍然存在沒有被創建。

+2

您不應將%ProgramFiles%目錄配置爲日誌記錄目標,因爲通常而言,應用程序不允許寫入該目錄。 – dymanoid

+1

@dymanoid理想情況下,我想將日誌文件寫入用戶本地文件夾中的客戶文件夾。任何想法我會怎麼做?不知道這是答案,因爲即使我硬編碼路徑到我的D:驅動器,我肯定有權限時,該文件不會被寫入。仍然值得首先確定位置,看看是否有幫助。謝謝 –

回答

4

感謝@dymanoid指引我在正確的方向。 log4net文檔在這方面有點弱,但是我發現this answer指出你可以在配置文件中使用正常的環境變量。

有了這個list of environment variables的幫助下,我結束了以下...

<param name="File" 
     value="${LOCALAPPDATA}\Physio Diary\PhysioDiaryClient.log" /> 

此文件正確寫入C:\Users\MyUsername\AppData\Local\Physio Diary\PhysioDiaryClient.log

希望這可以幫助別人。

相關問題