Я использую log4net с AdoNetAppender. Это, кажется, что AdoNetAppender имеет метод Сброса. Есть ли так или иначе, я могу назвать это из своего кода?
Я пытаюсь создать администраторскую страницу для просмотра всех записей в журнале транзакций базы данных, и мне понравится устанавливать log4net с bufferSize=100 (или больше), затем я хочу, чтобы администратор смог нажать кнопку на администраторской странице, чтобы вынудить log4net записать буферизированные записи в журнале в базу данных (не закрываясь log4net).
Это возможно?
Предполагая, что вы используете Log4Net из коробки, вы можете вытащить путь вниз и промыть подобное appender:
public void FlushBuffers()
{
ILog log = LogManager.GetLogger("whatever");
var logger = log.Logger as Logger;
if (logger != null)
{
foreach (IAppender appender in logger.Appenders)
{
var buffered = appender as BufferingAppenderSkeleton;
if (buffered != null)
{
buffered.Flush();
}
}
}
}
Редактировать : я написал вышеупомянутый в предположении, что вы хотели промыть приложки для Особенно ILOG
(вероятно, плохое предположение сейчас, когда я перечитал вопрос), но, как Стефан указывает на комментарий ниже, вы можете немного упростить код, если вы хотите промыть все приложения по всему Целый репозиторий следующим образом:
public void FlushBuffers()
{
ILoggerRepository rep = LogManager.GetRepository();
foreach (IAppender appender in rep.GetAppenders())
{
var buffered = appender as BufferingAppenderSkeleton;
if (buffered != null)
{
buffered.Flush();
}
}
}