c# - 向 MySQL 数据库写入异常时出现 Log4Net 异常

标签 c# mysql database logging log4net

记录异常时,它会正确显示在命令行中。但是,它不会写入数据库。其他参数已正确记录。

在我的app.config中,异常配置如下:

<commandText value="INSERT INTO logs (time, log_level, logger, message, exception, thread) VALUES (?time, ?log_level, ?logger, ?message, ?exception, ?thread)" />

参数:

<parameter>
    <parameterName value="exception" />
    <dbType value="String" />
    <size value="2000" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%exception" />
    </layout>
</parameter>

我正在测试:

try
{
    throw new DivideByZeroException();
}
catch (Exception e)
{
    log.Error("", e);
}  

我启用了 Log4Net 调试并得到以下输出:

log4net: Hierarchy Threshold []
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
log4net:ERROR [CustomAdoNetAppender] ErrorCode: GenericFailure. Exception while writing to database
12:25:37,902 [Game.Program] {exceptions} () ERROR:  System.DivideByZeroException: Attempted to divide by zero.
   at Game.Program.Init() in --:line 98

log4net:ERROR [CustomAdoNetAppender] ErrorCode: GenericFailure. Exception while writing to database
System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
   at System.Convert.ToInt32(Object value)
   at MySql.Data.Types.MySqlInt32.MySql.Data.Types.IMySqlValue.WriteValue(MySqlPacket packet, Boolean binary, Object val, Int32 length)
   at MySql.Data.MySqlClient.MySqlParameter.Serialize(MySqlPacket packet, Boolean binary, MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.Statement.SerialiSystem.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
   at System.Convert.ToInt32(Object value)
   at MySql.Data.Types.MySqlInt32.MySql.Data.Types.IMySqlValue.WriteValue(MySqlPacket packet, Boolean binary, Object val, Int32 length)
   at MySql.Data.MySqlClient.MySqlParameter.Serialize(MySqlPacket packet, Boolean binary, MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollection parameters, MySqlPacket packet, String parmName, Int32 parameterIndex)
   at MySql.Data.MySqlClient.Statement.InternalBindParameters(String sql, MySqlParameterCollection parameters, MySqlPacket packet)
   at MySql.Data.MySqlClient.Statement.BindParameters()
   at MySql.Data.MySqlClient.Statement.Execute()
   at MySql.Data.MySqlClient.PreparableStatement.Execute()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
   at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events)
   at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events)
zeParameter(MySqlParameterCollection parameters, MySqlPacket packet, String parmName, Int32 parameterIndex)
   at MySql.Data.MySqlClient.Statement.InternalBindParameters(String sql, MySqlParameterCollection parameters, MySqlPacket packet)
   at MySql.Data.MySqlClient.Statement.BindParameters()
   at MySql.Data.MySqlClient.Statement.Execute()
   at MySql.Data.MySqlClient.PreparableStatement.Execute()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
   at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events)
   at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events)

最佳答案

我发现了错误。

显然,我在调用测试异常函数时添加了一些尚未初始化的全局变量。我将这些变量初始化为空字符串和零,它起作用了。

关于c# - 向 MySQL 数据库写入异常时出现 Log4Net 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35915377/

相关文章:

mysql - 把一张 table 拆成几张小 table

php - 如何转置 Mysql INSERT 语句?

mysql - 加快返回许多结果的 mysql 查询

c# - 如何在开发存储中使用 REST 上传 blob?

c# - C#中事件的主要目的

php - 如何在php中的表单向导中显示一项数据?

mysql - ORDERing BY SUM 时的最佳 SQL 查询

php - 连接多个表中的数据

c# - 使用 SQL 插入日期时间(同时转换为字符串)

c# - 如何在表单中编辑和保存设置?