2015-02-05 32 views
0

我配置了兩臺記錄儀,並希望它們同時記錄到事件記錄和文本文件,但它們都記錄到文本。 這裏是我的配置文件:兩臺記錄儀寫入同一文件

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
     <file value="NavRiskFileImportError.log" /> 
     <appendToFile value="true" /> 
     <maximumFileSize value="100KB" /> 
     <maxSizeRollBackups value="2" /> 
     <datePattern value="yyyyMMdd" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="{%level}{%date} – %message%newline"/> 
     </layout> 
    </appender> 

    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
     <param name="ApplicationName" value="NavriskFromExcel" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
<!--loggers--> 
    <logger name="FileLogger"> 
     <level value="ALL" /> 
     <appender-ref ref="RollingFile" /> 
    </logger> 

    <logger name="EventLogger"> 
     <level value="ALL" /> 
     <appender-ref ref="EventLogAppender" /> 
    </logger> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="EventLogAppender" /> 
     <appender-ref ref="RollingFile" /> 
    </root> 
    </log4net> 

在我的應用程序有:

private static ILog logger= LogManager.GetLogger("FileLogger"); 
private static ILog eventLogger= LogManager.GetLogger("EventLogger"); 

但兩者記錄器的文件,並沒有在事件日誌中寫入數據。我做錯了什麼?

回答

3

您必須指定的個人記錄器additivity="false",否則它們繼承根記錄的追加程序:

加和被默認設置爲true,這是孩子們在默認情況下繼承其祖先的 追加程序。如果這個變量設置爲 false,那麼在此logger的祖先發現追加程序不 使用(source

因此,這將意味着:

<logger name="EventLogger" additivity="false"> 

這就解釋了爲什麼都被寫入文件。

所以剩下的問題是爲什麼EventLogAppender不起作用。您可以檢查配置錯誤與此代碼:

var messages = LogManager.GetRepository().ConfigurationMessages.Cast<LogLog>(); 

if (messages.Any()) 
{ 
    string message = messages.Aggregate("Log4net Configuration Errors: " 
             + Environment.NewLine, 
      (s, log) => s + log.Message + Environment.NewLine); 
} 

如果不顯示任何東西,enable log4net internal debugging並檢查輸出。

編輯:文檔狀態爲EventLogAppender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges,但事件源需要由高級進程或installer創建 - 事件源必須在每臺計算機上創建一次。

+0

謝謝,試過了,現在它只寫入文件沒有在事件日誌中沒有錯誤 – Yuri 2015-02-05 19:16:56

+0

我的猜測是權限。這是一個Web應用程序嗎? – stuartd 2015-02-05 19:40:15

+0

不,這是控制檯,在域管理員帳戶下運行 – Yuri 2015-02-05 19:46:43

相關問題