【问题标题】:How to Keep Log4Net From Truncating Exceptions?如何防止 Log4Net 截断异常?
【发布时间】:2014-09-01 10:22:00
【问题描述】:

我正在将 Log4Net 事件插入 SQL 数据库。 Message 和 Exception 字段都是 8000 个字符,但偶尔会出现超过 8000 个字符的事件,并且数据会被截断。

是否有任何可配置的方式让它将事件分成多行?如果没有,我目前正在考虑实现我自己的 ILog,它会自动处理将日志记录事件分块,这样我就不会得到任何截断的数据。有人有更好的主意吗?

编辑 - 记录配置/数据库列定义

这是我当前的参数配置:

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

数据库表是这样定义的:

[Message] [nvarchar](max) NULL,
[Exeception] [ntext] NULL,

【问题讨论】:

标签: c# logging log4net log4net-configuration log4net-appender


【解决方案1】:

您必须将 size 值属性设置为 -1。这将保存整个异常。

【讨论】:

    【解决方案2】:

    检查存储过程中的参数大小:

    CREATE PROCEDURE [dbo].[Log4net_Insert] 
    (
        @Date DATETIME,
        @Thread VARCHAR(255),
        @Level VARCHAR(50),
        @Logger VARCHAR(255),
        @Message VARCHAR(4000),
        @Exception VARCHAR(2000)  /* Set this to MAX to prevent truncation! */
    ) 
    AS
    
    BEGIN
    
        INSERT INTO [dbo].[Log4Net] 
        ([Date],[Thread],[Level],[Logger],[Message],[Exception]) 
        VALUES (@Date, @Thread, @Level, @Logger, @Message, @Exception)
    
    END
    

    此外,Microsoft 建议您将任何使用 NTEXT 的内容转换为更新的内容:ntext, text, and image (Transact-SQL)

    重要! ntext、text 和 image 数据类型将在 SQL Server 的未来版本。避免在 new 中使用这些数据类型 开发工作,并计划修改当前使用的应用程序 他们。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

    【讨论】:

      猜你喜欢
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 2016-05-09
      相关资源
      最近更新 更多