C# mysql数据库日志记录中的log4net日志记录错误

C# mysql数据库日志记录中的log4net日志记录错误,c#,mysql,log4net,log4net-appender,C#,Mysql,Log4net,Log4net Appender,我正在使用log4net登录mysql数据库。log4net配置是正确的,因为我已经测试过登录sql server和文件,但当我在mysql数据库中写入日志时,它会向我提示一个错误 下面是我的log4net配置 <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="log

我正在使用log4net登录mysql数据库。log4net配置是正确的,因为我已经测试过登录sql server和文件,但当我在mysql数据库中写入日志时,它会向我提示一个错误

下面是我的log4net配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>  
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>  
  </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
    </startup>

  <log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
      <connectionString value="Server=127.0.0.1;Database=logdb;Uid=abc;Pwd=abc;" />
      <commandText value="INSERT INTO log (timestamp,Thread,Level,Logger,Message) VALUES (?log_date, ?thread, ?log_level, ?logger, ?message);" />
      <parameter>
        <parameterName value="?log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="?thread" />
        <dbType value="String" />
        <size value="32" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="?log_level" />
        <dbType value="String" />
        <size value="32" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="?logger" />
        <dbType value="String" />
        <size value="256" />
        <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>
      
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="AdoNetAppender" />
    </root>
  </log4net>
  
  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
  </appSettings>

<system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\Logs\log4net.txt"/>
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>
我还 “
[程序集:log4net.Config.XmlConfigurator(ConfigFile=“Web.Config”,Watch=true)]
" 这是程序集文件中的一行。 我遇到的错误是

**

**

但实际上我正在传递所有必需的参数,我不知道为什么会出现这个错误


任何人都可以指导。

这是MySql.Data中的一个错误。据我所知,还没有针对它的错误报告,但您可以从MySql中看到。如果调用
MySqlCommand,数据将失败。请在添加参数之前准备

然而,这是完全正确的。(该代码中有一个
try
/
catch
块,但这是2.0.12之后的最新更改。)

有两种可能的修复方法:

  • 切换到并更改
    以使用它
  • IgnorePrepare=true
    添加到MySql.Data连接字符串中,这将导致
    Prepare
    成为禁止操作

  • 可以显示mysqlconnector的任何示例吗?@hashimkayani我还没有测试过它,但是如果我让它工作起来,就会更新它。
     class Program
            {
                private static readonly ILog Logger = LogManager.GetLogger(System.Environment.MachineName);
        
                static void Main(string[] args)
                {
                    log4net.Config.XmlConfigurator.Configure();
        
                    Logger.Info("Testing information log from .Net app");
                    Logger.Debug("Testing Debug log from .Net app");
                    Logger.Fatal("Testing Fatal log from .Net app");
                }
            }
    
    log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Exception while writing to database
    System.InvalidOperationException: Parameter '?log_date' was not found during prepare.
       at MySql.Data.MySqlClient.PreparableStatement.Prepare()
       at MySql.Data.MySqlClient.MySqlCommand.Prepare(Int32 cursorPageSize)
       at MySql.Data.MySqlClient.MySqlCommand.Prepare()
       at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events)
       at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events)
    log4net: Shutdown called on Hierarchy [log4net-default-repository]