0

在遵循一些示例和教程之后,我将 log4net 记录到我的数据库中。有几件事我不清楚。

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

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

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

有人可以澄清应该在该字段中记录什么以及何时记录吗?

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

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

1 回答 1

1

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

例如,如果您使用

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

那么你的数据库的异常列将被设置为 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";

命名线程是个好主意,因为它使过滤/识别更加容易。

于 2013-07-06T11:23:44.160 回答