2011-01-11 35 views
0

我正在使用Log4Net爲Windows NT服務實現日誌記錄解決方案。我可以翻轉配置文件中的開關來開始將信息記錄到文件系統。到目前爲止,我已經能夠通過使用滾動文件appender並使log4net「監視」配置文件來實現此目的。如果Log4Net沒有訪問文件系統的權限,會發生什麼

我注意到,即使所有日誌記錄已關閉並且我不打算記錄,Log4Net將在服務啓動後立即創建空日誌文件。

我不能找到有關這個主題不是這個職位的其他許多信息:

How to disable creation of empty log file on app start?

我擔心的是,有人可以建立一個非常低的水平設置權限的服務,將不甚至有權在文件系統上創建日誌文件。即使我不打算記錄日誌,我也不希望每次遇到日誌記錄時拋出異常都會導致性能損失。

我已經用檢查來包裝每個日誌語句,以查看在嘗試登錄之前是否啓用了日誌記錄級別,但是我仍然不確定是否在log4net的內部工作方式中是否仍會拋出異常如果在appender中配置的文件沒有創建。

if (logger.IsDebugEnabled) 
{ 
    logger.DebugFormat(format, traceMessage);  
} 

有誰知道如果log4net最初不能創建日誌文件,log4net會做什麼?

這是關於我的配置的一些信息。日誌記錄在打開時工作正常,我只是擔心權限問題。

屬性上我的日誌類來監視配置的變化:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Logging.config", Watch = true)]

追加程序:

<appender name="Test" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value=".\\AppLogs\\_test.%appdomain.log" /> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="ALL" /> 
     <levelMax value="FATAL" /> 
     <acceptOnMatch value="false"/> 
    </filter> 
    <filter type="log4net.Filter.LoggerMatchFilter"> 
     <loggerToMatch value="Test" /> 
    </filter> 
    <appendToFile value="true" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="6MB" /> 
    <rollingStyle value="Size" /> 
    <staticLogFileName value="true" /> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level - %message%newline" /> 
    </layout> 
    </appender> 
+0

我不確定這是否在2011年是真實的,但至少對於最新版本的Log4Net而言,它會在內部檢查是否在實際嘗試記錄任何內容之前啓用了給定日誌級別。像IsDebugEnabled這樣的功能只有在CPU /資源密集型的情況下才能生成發送給記錄器的數據。相關的,像DebugFormat這樣的函數有簡明扼要的雙重目的,而且它不需要做實際的string.Format,除非啓用日誌級別。 – ShawnFumo 2015-04-16 21:07:32

回答

1

「我擔心的是,有人可以設置該服務以非常低的水平集的權限,甚至沒有權限在文件系統上創建日誌文件。「 - 在服務啓動時檢測到您需要的最小權限集合存在並拋出異常(或以其他方式處理),如果它們不是。

我不認爲這本身就是一個日誌記錄問題;更重要的是您的服務是否具有所需的權限。

+0

這是一個很好的建議。我正在閱讀這篇文章,我將要確保我正在寫入Windows 7和Windows Server 2008的適當位置http://stackoverflow.com/questions/468989/how-to-specifiy-common-application- data-folder-for-log4net ...有沒有一種很好的模式來通知用戶爲什麼服務無法啓動?如果我不能寫入ProgramData位置,最有可能如何向用戶提供有關服務無法啓動的消息? – Loathian 2011-01-11 04:00:21

相關問題