Как уберечь Log4Net от усечения исключений?

Я вставляю события Log4Net в базу данных SQL. Поля «Сообщение» и «Исключение» содержат по 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,

person Daryl    schedule 10.07.2014    source источник
comment
Как выглядит ваша текущая конфигурация? log4net добавляет полную трассировку стека в таблицу базы данных через параметр исключения актуален?   -  person CodeCaster    schedule 11.07.2014
comment
@CodeCaster, согласно вашему linq, похоже, что простое снятие ограничения по размеру приведет к заполнению всего журнала. Это звучит правильно?   -  person Daryl    schedule 11.07.2014
comment
Комментарий к принятому ответу: исключение элемента size у меня не сработало, но установка его на -1 сработала.   -  person CodeCaster    schedule 11.07.2014


Ответы (2)


Вы должны установить для атрибута значения размера значение -1. Это сохранит все исключение.

person Peter    schedule 12.07.2014

Проверьте размер параметра в хранимой процедуре:

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, и изображение (Transact-SQL)

ВАЖНЫЙ! Типы данных ntext, text и image будут удалены в будущей версии SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые в настоящее время их используют. Вместо этого используйте nvarchar(max), varchar(max) и varbinary(max).

person J. Hoy    schedule 24.02.2017