在本地运行时没有实例化appender

时间:2015-04-29 10:25:17

标签: visual-studio log4net adonetappender

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

我通过打破所有抛出的异常来检查异常,没有抛出任何东西,我激活了内部log4net调试,并且在调试输出中没有显示异常。

我还在<trust level="Full"/>添加了web.config,没有...

我又难过了,它在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("...")会返回一个没有appender的记录器。但是,如果我进一步检查层次结构,我可以在那里看到AdoNetAppender,并且当XmlConfigurator.Configure()运行时,它会输出以下log4net: Adding appender named [ADONetAppender] to logger [root]. ...

所以问题归结为(这只发生在本地,而不是生产)从LogManager.GetLogger(...)返回的对象不包含任何appender。

解决

请参阅下面接受的答案。事实证明,我真正缺少的是在XmlConfigurator.Configure()方法中调用Application_Start。所有其他的证据&#39;我提供的是正常行为,而且我没有在本地看到任何日志消息的原因是我的本地数据库与生产数据库之间的日志表模式之间存在轻微的无意识差异。

1 个答案:

答案 0 :(得分:1)

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

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

这适用于天蓝色和本地。