Ошибка log4net: System.Data.SqlClient.SqlException (0x80131904): сбой INSERT, поскольку следующие параметры SET имеют неправильные настройки: «ANSI_NULLS» - PullRequest
0 голосов
/ 29 августа 2018

В существующем проекте у нас есть log4net, настроенный на использование настраиваемого приложения ADO.NET (AsglAppender) для записи ошибок в базу данных SQL Server:

public class AsglAppender : BufferingAppenderSkeleton

И раздел конфигурации log4net определен так:

<log4net>
    <appender name="AsglAppender" type="Asgl.Core.Logging.AsglAppender, Asgl.Core" />
    <appender name="TcpAppender" type="Asgl.Logging.TcpAppender, Asgl">
        <param name="LocalPort" value="882" />
        <layout type="log4net.Layout.XmlLayout" />
    </appender>
    <logger name="NHibernate">
        <level value="OFF" />
    </logger>
    <root>
        <level value="ERROR" />
        <appender-ref ref="AsglAppender" />
    </root>
    <!--
    <root>
        <level value="ALL" />
        <appender-ref ref="TcpAppender" />
    </root>
    -->
</log4net>

Когда logger.Error («Некоторое сообщение об ошибке»); вызывается, я получаю это исключение:

System.Data.SqlClient.SqlException (0x80131904): сбой INSERT, поскольку следующие параметры SET имеют неправильные настройки: «ANSI_NULLS». Убедитесь, что параметры SET верны для использования с индексированными представлениями и / или индексы на вычисляемых столбцах и / или отфильтрованные индексы и / или запрос уведомления и / или методы типа данных XML и / или пространственный индекс операции.

Это существующий код, который, предположительно, раньше работал нормально.

После отладки я обнаружил, что этот переопределенный метод AsglAppender вызывается

protected override void SendBuffer(LoggingEvent[] events)

, который выполнил пользовательскую хранимую процедуру ErrorInsert , которая выполняет вставку сообщения об ошибке в таблицу. Я проверил хранимую процедуру и обнаружил, что она была создана с SET ANSI_NULLS OFF

После того, как я изменил его на SET ANSI_NULLS ON , регистрация начала работать без проблем. Не уверен, почему этот параметр влияет на ведение журнала таким образом ...

...