如何保持Log4Net从截断异常
本文关键字:异常 何保持 Log4Net | 更新日期: 2023-09-27 18:12:36
我将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,
必须将size value属性设置为-1。这将保存整个异常
检查存储过程中的参数大小:
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,文本和图像(Transact-SQL)
重要!文本、文本和图像数据类型将被删除SQL Server的未来版本。避免在new中使用这些数据类型开发工作,并计划修改当前使用的应用程序他们。请使用varchar(max), varchar(max)和varbinary(max)。