【问题标题】:Questions regarding log4net's AdoNetAppender关于 log4net 的 AdoNetAppender 的问题
【发布时间】:2013-07-06 19:40:15
【问题描述】:

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

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

 <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>

【问题讨论】:

    标签: log4net


    【解决方案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";
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2019-11-11
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      相关资源
      最近更新 更多