2010-04-06 95 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

相关问题