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