gpt4 book ai didi

asp.net - log4Net EventlogAppender 不适用于 Asp.Net 2.0 网站?

转载 作者:行者123 更新时间:2023-12-02 02:15:51 24 4
gpt4 key购买 nike

我已经为 Asp.Net 2.0 配置了 log4Net EventLogAppender。但是它不记录任何内容。我的 Web.Config 中有以下内容。

<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>

我已经创建了 Test-Log 事件日志,并且 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# 中基于控制台的应用程序创建事件源 (Test-Web),然后使用 Web 应用程序,它最终会起作用。

最佳答案

有一些非常简单的步骤可以让 Log4Net 通过 ASP.NET 处理事件日志。

您的选择是:

更改应用程序池

作为 LocalSystem 运行应用程序池

或者...设置应用程序名称,添加注册表项

首先配置您的配置文件,以便有一个应用程序名称

如果您遇到权限问题,这一点很重要,因为如果您peer at the source您将看到 EventLogAppender 默认应用程序名称(事件日志中的源列)为:

System.Threading.Thread.GetDomain().FriendlyName

这要求您的应用程序在每次名称更改时创建一个注册表项,并且有点困惑。所以最好的解决方案是设置您的应用程序名称。下面是发送每个错误级别的示例 EventLogAppender 部分,ApplicationName 行是重要部分:

<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,将其值设置为

C:\Windows\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll

该路径似乎适用于 64 位和 32 位环境。

使用这种技术,您不需要在注册表中设置权限,并且一旦创建了上面的 key ,它就应该可以工作。

关于asp.net - log4Net EventlogAppender 不适用于 Asp.Net 2.0 网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com