log4net Mysql 日志记录在我的 .net 3.5 应用程序中不起作用

log4net Mysql logging not working in my .net 3.5 application

我有一个应用程序,其中简单的文本文件日志记录工作正常。现在我还需要登录 mysql 数据库。 但是在我的代码日志条目之后什么也没有发生。 我的 log4net 配置是

<?xml version="1.0" encoding="utf-8" ?>
<log4net>  
  <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <immediateFlush value="true" />
    <bufferSize value="1" />
    <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    <connectionString value="data source=localhost;initial catalog=mytestdb;User ID=root;Password=" />
    <commandText value="INSERT INTO system_log(thread,level,appname,message,action) VALUES (?thread, ?level, ?appname, ?message, ?action)" />   
    <parameter>
      <parameterName value="thread" />
      <dbType value="String" />
      <size value="100" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%t" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="level" />
      <dbType value="String" />
      <size value="10" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%p" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="appname" />
      <dbType value="String" />
      <size value="10" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="My Web Service" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="message" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%m" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="action" />
      <dbType value="String" />
      <size value="45" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%5c{1}.%M" />
      </layout>
    </parameter>
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="DEBUG" />
      <levelMax value="FATAL" />
    </filter>
  </appender>
  <!--<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file value="..\Logs.txt" />
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd" />
    <rollingStyle value="Date" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="DEBUG" />
      <levelMax value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff} %10p %-5property{_App} %-5property{_Node} [%2t] %5c{1}.%M - %m%n" />
    </layout>
  </appender>-->
  <root>  
    <level value="ALL" />    
     <!--<appender-ref ref="RollingLogFileAppender" />-->
    <appender-ref ref="AdoNetAppender" />
  </root>  
</log4net>

在当前配置中,缓冲区大小最初设置为 100..所以我必须将其设置为 0 或 1,以便 log4net 立即发送消息。

<bufferSize value="0" />

第二个问题是我以错误的方式使用命令参数 我已将其设置为

<commandText value="INSERT INTO system_log(thread_id,level,appname,message,action) VALUES (@threadParam,@levelParam,@appnameParam,@messageParam,@actionParam);" />

有效