【问题标题】:Log4net does not log to databaseLog4net 不记录到数据库
【发布时间】:2014-09-16 08:33:07
【问题描述】:

我创建了一个使用 log4net 登录到数据库的 MVC Web API 项目。我的问题是实际上没有任何内容记录到数据库表中。单步执行代码时,我没有遇到异常,并且 IsInfoEnabled 为真(以及所有其他 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");
        }

【问题讨论】:

    标签: logging log4net


    【解决方案1】:

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

    Log4net not inserting into the database?

    我把&lt;bufferSize value="100" /&gt;改成了&lt;bufferSize value="1" /&gt;,每次都写入数据库。

    【讨论】:

    • 我很遗憾我只能投赞成票。这可能让我伤心了两个小时。谢谢。
    • 是的,但是要小心很多“插入”,缓冲区大小是为了减少命中数据库的次数。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多