2010-04-06 129 views
9

我爲Asp.Net 2.0配置了log4Net EventLogAppender。但它不會記錄任何內容。我在我的Web.Config中有以下內容。log4Net EventlogAppender不適用於Asp.Net 2.0網站?

<log4net> 
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
     <param name="LogName" value="Test Log" /> 
     <param name="ApplicationName" value="Test-Web" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <priority value="ERROR"/> 
     <appender-ref ref="EventLogAppender"/> 
    </root> 
    <logger name="NHibernate"> 
     <level value="ERROR" /> 
     <appender-ref ref="EventLogAppender" /> 
    </logger> 
    </log4net> 

我已經創建了測試日誌事件日誌,並且AspNet用戶具有事件日誌註冊表項的權限。我也有在Global.asax Application_Start中配置的log4Net。

log4net.Config.XmlConfigurator.Configure(); 

更新:我打開log4net的內部調試,發現下面的錯誤在跟蹤。

log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [EventLogAppender] of type [log4net.Appender.EventLogAppender]. Reported error follows. 
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security. 
    at System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly) 
    at System.Diagnostics.EventLog.SourceExists(String source, String machineName) 
    at System.Diagnostics.EventLog.SourceExists(String source) 
    at log4net.Appender.EventLogAppender.ActivateOptions() 
    at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement) 

更新2:如果我創建使用C#一個基於控制檯的應用程序,然後使用Web應用程序的事件來源(測試網絡)這最後的作品。

+2

您是否嘗試開啓log4net內部調試?也許這是拋出一個你通常不會看到的錯誤:http://logging.apache.org/log4net/release/faq.html – 2010-04-06 19:00:51

回答

4

我無法確切地告訴你什麼可能是錯誤的,但是如果你到這裏,你會看到「我如何啓用log4net內部調試?」在底部。如果出現錯誤,Log4net不會拋出異常,因此您必須啓用內部調試才能從log4net獲取信息。

http://logging.apache.org/log4net/release/faq.html

編輯:另請參見quesiton一個解釋潛力掛斷與使用EventLogAppender後直接。

+2

[直接鏈接到提到的部分](http://logging.apache.org/ log4net/release/faq.html#internalDebug) – 2013-10-23 09:34:04

2

我懷疑代碼訪問安全性阻止您訪問事件日誌。 This article有關於該主題的信息。基本上,如果您的ASP.Net應用程序在中等信任下運行,應用程序將無法訪問事件日誌。

注意:這不是log4net本身的限制,它是.Net Framework和ASP.Net的一個「特性」。

11

有一些非常簡單的步驟可以讓Log4Net與ASP.NET一起使用事件日誌。

的選項有:

更改應用程序池

運行的應用程序池作爲LocalSystem

或...設置應用程序的名稱,添加註冊表項

配置您的配置首先文件所以有一個應用程序名稱

,如果你有一個權限問題,因爲如果你peer at the source你會看到EventLogAppender默認的應用程序名稱(在事件日誌的源列)到這一點很重要:

的System.Threading。 Thread.GetDomain()。FriendlyName

這需要您的應用程序在每次名稱更改時創建一個註冊表項,並且有點麻煩。所以最好的解決方案是設置你的應用程序名稱。下面是在發送的每個錯誤級別爲例EventLogAppender段,應用程序名稱線是重要的部分:

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
    <param name="ApplicationName" value="MY-AWESOME-APP" /> 
    <evaluator type="log4net.Core.LevelEvaluator"> 
     <threshold value="INFO" /> 
    </evaluator> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <param name="LevelMin" value="INFO"/> 
     <param name="LevelMax" value="FATAL"/> 
    </filter> 
    <layout type="log4net.Layout.PatternLayout"> 
     <!-- The event log already logs the date so just log the message --> 
     <conversionPattern value="%message" /> 
    </layout> 
</appender> 

在作出這種改變,做到以下幾點:

創建註冊表項

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\MY-AWESOME-APP

在此創建一個字符串值

將其命名爲EventMessageFile,將其值設置爲t ø

C:\的Windows \ Microsoft.NET \框架\ V2.0.50727 \ EventLogMessages.dll

即路徑同時出現在64位和32位的環境下工作。

使用這種技術,您不需要在註冊表中設置權限,一旦創建了上面的密鑰,它就應該可以工作。

+1

對於.NET 4 +應用程序,路徑爲C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ EventLogMessages.dll – trydis 2014-05-27 12:56:07

相關問題