你能指点我一些log4net教程或样本,记录使用OWIN时我的MVC Web Api上发生的所有未处理异常吗?
我有一个Startup
类,用于配置Castle Windsor
和OAuth
,我不确定如何为启用OWIN的应用程序处理应用程序错误。
我已尝试将log4net代码放在Application_Error
中的global.asax
事件中,但它永远不会被执行。
public class WebApiApplication : System.Web.HttpApplication {
protected void Application_Start() {
log4net.Config.XmlConfigurator.Configure();
}
protected void Application_Error(object sender,EventArgs e) {
Exception lastException = Server.GetLastError();
var logger = log4net.LogManager.GetLogger(typeof(WebApiApplication));
logger.Fatal(lastException);
}
}
为什么会这样?
使用log4net配置编辑:web.config :
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net debug="true">
<logger name="SiteWorksAPI">
<level value="Debug" />
<appender-ref ref="EventLogAppender" />
</logger>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="C:\ProgramData\Site\SiteWorksAPILog.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<immediateFlush value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="============================================================%nLogger = %logger.%nLocation = %location.%nUnique Token = %property{x-fcc-uniquetoken}.%nDate = %date{dd MMM yyyy - HH:mm:ss}.%nMessage = %message%n" />
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<applicationName value="SiteWorks.API" />
<logname value="SiteWorks API Log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="Date: %date{dd MMM yyyy - HH:mm:ss} %nMessage: %message %nIdentity: %identity %nUnique Token: %property{x-fcc-uniquetoken} %nChange Time Stamp: %property{x-fcc-changedatetime} %nOriginal Time Stamp: %property{x-fcc-originaltimestamp} %nOriginating System: %property{x-fcc-originatingsystem} %nOriginating User: %property{x-fcc-originatingusername} %nRequest Uri: %property{Request} %nResponse Headers: %property{ResponseHeaders}%nLogger: %logger %nThread: %thread %n%n%exception" />
</layout>
</appender>
</log4net>
答案 0 :(得分:1)
您没有看到任何日志事件,因为您尚未在配置中定义root
记录器 - 您定义的唯一记录器名为SiteWorksAPI
,因此您使用任何其他记录器创建的记录器名称 - 例如,以typeof(WebApiApplication)
命名的名称 - 不会记录任何内容。如果在日志记录语句中添加断点,则会看到所有日志级别都被禁用。
根记录器中定义的appender由所有已命名的appender继承(除非使用additivity = false
定义子appender) - 但是子appender设置了自己的日志级别。
<root>
<level value="Debug" />
<appender-ref ref="EventLogAppender" />
</root>
编辑:还有另外需要考虑的事情 - 您定义的记录器仅使用EventLogAppender - 请注意,为了记录事件日志,文档指出EventLogAppender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges但需要创建事件源升级过程。
出于测试目的,您可能希望将FileAppender
添加到记录器中。