Log4net不会记录到数据库

时间:2014-09-16 08:33:08

标签: logging log4net

我创建了一个使用log4net登录数据库的MVC Web API项目。我的问题是没有任何实际记录到数据库表。单步执行代码时,我得到noe异常并且IsInfoEnabled为true(以及所有其他IsEnabled属性)。我已打开log4net的调试,但在log4net.txt文件中也没有错误或异常。我在这里开始有点沮丧。非常感谢帮助。

我的web.config文件

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <connectionStrings>
  </connectionStrings>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
  </appSettings>

  <log4net>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="ADONetAppender" />
    </root>
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="100" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="server=myserver; uid=username; pwd=password; database=db" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.RawTimeStampLayout"/>
      </parameter>
      <parameter>
        <parameterName value="@thread"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message"/>
        <dbType value="String"/>
        <size value="4000"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception"/>
        <dbType value="String"/>
        <size value="2000"/>
        <layout type="log4net.Layout.ExceptionLayout"/>
      </parameter>
    </appender>
  </log4net>

  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add
            name="textWriterTraceListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="C:\temp\log4net.txt" />
      </listeners>
    </trace>
  </system.diagnostics>

</configuration>

我的数据库表:

CREATE TABLE [dbo].[Log] (

    [Id] [int] IDENTITY (1, 1) NOT NULL,

    [Date] [datetime] NOT NULL,

    [Thread] [varchar] (255) NOT NULL,

    [Level] [varchar] (50) NOT NULL,

    [Logger] [varchar] (255) NOT NULL,

    [Message] [varchar] (4000) NOT NULL,

    [Exception] [varchar] (2000) NULL

)

在Global.asax

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

           ....

            log4net.Config.XmlConfigurator.Configure();
            var log = LogManager.GetLogger("logger");
            log.Info("application start");
        }

2 个答案:

答案 0 :(得分:2)

像往常一样,我在StackOverflow上发布问题后立即找到答案。

Log4net not inserting into the database?

我将<bufferSize value="100" />更改为<bufferSize value="1" />,并且每次都会写入数据库。

答案 1 :(得分:1)

请在log4net部分的根元素中将Level值设置为“ALL”