本地运行时没有实例化任何附加程序



我有一个使用log4net的web应用程序。我的web应用程序已部署到Azure,并在那里完美工作。然而,当我通过VS2013(更新4)在本地运行它时,log4net并没有实例化AdoNetAppender

我通过中断所有抛出的异常来检查异常,没有抛出任何异常,我激活了内部log4net调试,调试输出中没有显示任何异常。

我还在我的web.config中添加了<trust level="Full"/>,什么都没有。。。

我又被难住了,它在Azure上有效,但在本地无效。有什么想法吗?谢谢

编辑这是我的web.config(仅限相关行)

<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.SQLEXPRESS;Initial Catalog=**********;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
</connectionStrings>
<log4net debug="true">
<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionStringName value="DefaultConnection" />
<commandText value="INSERT INTO Log ([StoreId],[Date],[Thread],[Level],[Logger],[Message],[Exception],[User]) VALUES (@store, @log_date, @thread, @log_level, @logger, @message, @exception, @user)" />
<parameter>...</parameter>
...
</appender>
<appender name="DebugAppender" type="log4net.Appender.DebugAppender">
<immediateFlush value="true" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" />
<appender-ref ref="DebugAppender" />
</root>
</log4net>
<appSettings>
<add key="log4net.Internal.Debug" value="true" />
<add key="log4net.Config" value="log4net.simple.config"/>
<add key="log4net.Config.Watch" value="True"/>
</appSettings>
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" maxRequestLength="1048576" />
<customErrors mode="Off" />
<trust level="Full"/>
</system.web>
</configuration>

更新2

我发现,尽管log4net配置正确,但调用LogManager.GetLogger("...")会返回一个没有附加程序的记录器。然而,如果我进一步检查层次结构,我可以在那里看到我的AdoNetAppender,并且当XmlConfigurator.Configure()运行时,它输出以下log4net: Adding appender named [ADONetAppender] to logger [root].。。。

因此,问题归结为(这种情况仅在本地发生,而不是在生产中发生)从LogManager.GetLogger(...)返回的对象不包含任何附加器。

已解决

请参阅下面接受的答案。事实证明,我真正缺少的只是对Application_Start方法中XmlConfigurator.Configure()的调用。我提供的所有其他"证据"都是正常行为,我在本地没有看到任何日志消息的原因是我的本地数据库和生产数据库之间的日志表模式之间有一点无意的差异。

您可以在Global.asax:中配置log4net

public class WebApiApplication : HttpApplication
{
protected void Application_Start()
{
XmlConfigurator.Configure();

这适用于azure和local。

最新更新