Ведение журнала на SQL Server в больших количествах с использованием log4net

Я использую log4net для записи сообщений в базу данных SQL Server с помощью файла AdoNetAppender. Мне нужно вставлять журналы навалом. Я пытался использовать свойство batchSize приложения appender, но, насколько я могу судить, результат выглядит примерно так:

conn.Open();

for (int i = 0; i < count; i++)
{
    comm.ExecuteNonReader();
}

conn.Close();

И это в итоге выливается в кучу вставок. Так что, если мой размер партии, например, 500, то будет 500 последовательных вставок.

Моя цель состоит в том, чтобы объемы были вставлены в 1 оператор вставки. Например, SqlBulkCopy в .NET.

Можно ли добиться такого результата с помощью log4net? Или мне нужно реализовать свой собственный аппендер, чтобы сделать это?


person Remoba    schedule 16.12.2015    source источник


Ответы (1)


Вы должны написать свой собственный аппендер, потому что log4net не делает этого из коробки. Вы можете просто наследовать от AdoNetAppender и переопределить virtual protected void SendBuffer(IDbTransaction dbTran, LoggingEvent[] events)

AdoNetAppender.cs

person Peter    schedule 17.12.2015
comment
Спасибо за ответ. В итоге я использовал следующую реализацию: github.com /cneuwirt/rhino-commons/blob/master/Rhino.Commons/ - person Remoba; 17.12.2015
comment
Привет, Питер, у тебя есть пример массовой вставки с использованием IDbTransaction? - person Dave Lawrence; 09.08.2017
comment
@dave извините, у меня нет такого примера. Добавление транзакции вокруг вставки не имеет смысла в сценарии ведения журнала. Откат может удалить logentries. - person Peter; 09.08.2017