关于log4net的AdoNetAppender的问题

时间:2013-07-05 20:54:58

标签: log4net

按照一些示例和教程后,我将log4net登录到我的数据库。有些事情我不清楚。

the log4net page上的示例中,它列出了配置区域中的以下节点。

 <parameter>
    <parameterName value="@exception" />
    <dbType value="String" />
    <size value="2000" />
    <layout type="log4net.Layout.ExceptionLayout" />
 </parameter>

即使我在异常中登录,此参数似乎也会将空字符串传递给数据库。

有人可以澄清应该记录到这个字段的内容以及何时?

此外,该示例还将'thread'作为varchar(255)记录到数据库中。我在该领域获得的是一个整数。我不熟悉线程。我可以将它存储为int吗?在某些情况下,这最终会成为一个字符串吗?

   <parameter>
     <parameterName value="@thread" />
     <dbType value="String" />
     <size value="255" />
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%thread" />
     </layout>
   </parameter>

1 个答案:

答案 0 :(得分:1)

为了填充异常,您需要使用正确的重载

例如,如果您使用

 catch (Exception ex)
 {
    log.Error("Error saving details" , ex);
    ...   
 }

然后数据库的exception列将设置为ex.ToString()

如果您使用

 log.Error("Error saving details " + ex.ToString());

然后异常没有填写

对于线程标识符,这应该是数据库中的字符串。默认线程id是一个整数,但您可以显式命名该线程,

例如

 var ts = new System.Threading.ThreadStart(InitialiseDatabase);
 var thread = new System.Threading.Thread(ts);
 thread.Name = "Initialising Database";

为线程命名是个好主意,因为它可以更轻松地过滤/识别。