Как отключить сообщения о состоянии журнала log4net на консоли?

Я использую log4net в своем консольном приложении .NET 3.5 и хотел бы, чтобы сообщения журнала, которые я генерирую, были видны как в стандартном стандарте консоли, так и в RollingFileAppender. Выход файла работает как шарм, но я вижу поток сообщений о статусе, идущих к стандарту консоли при выполнении. Я хотел бы пропустить всю информацию о состоянии и видеть только те сообщения, которые я программно генерирую в файл журнала.

Вот пример того, что я вижу после запуска моего приложения:

log4net: XmlHierarchyConfigurator: Configuration update mode [Merge].
log4net: XmlHierarchyConfigurator: Logger [root] Level string is [DEBUG].
log4net: XmlHierarchyConfigurator: Logger [root] level set to [name="DEBUG",value=30000].
log4net: XmlHierarchyConfigurator: Loading Appender [Console] type: [log4net.Appender.ConsoleAppender]
log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]

и он продолжает движение до тех пор, пока не будет описано все экземпляры объекта журнала.

Как отключить это? Могу я? Я пробовал всевозможные настройки файла конфигурации, но ничего не уходит! Хмм...

Ответ 1

Я просто прошел эту же проблему (что неудивительно, что я нашел этот вопрос).

В любом случае, моя проблема и, возможно, ваша, вызвана настройкой файла конфигурации веб-приложения "< log4net debug = true >". Слишком очевидно, не так ли? Я вложил скелет в свои настройки app.config из веб-фрагмента и сосредоточился на приложениях, не вдаваясь в первый элемент root log4net. Но у вас это есть. Это в FAQ, но опять-таки другие вещи привлекли мое внимание, а не этот атрибут.

Ответ 2

установить debug = false

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net debug="false">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="your file name" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
</configuration>

Ответ 3

Попробуйте повторить проблему, используя новый проект за один шаг (первая ссылка log4net без приложения, а затем с консольным приложением, а затем с обоими приложениями). Если он показывает то же поведение, отправьте полную конфигурацию log4net.

Также вы можете попробовать использовать образцы конфигурации из страницы примеров конфигурации log4net.

Изменить: Это может быть причиной этих сообщений: Как включить внутреннюю отладку log4net.

Ответ 4

Если это у вас в коде:

log4net.Config.BasicConfigurator.Configure();

Измените его на:

log4net.Config.XmlConfigurator.Configure();

Ответ 5

Не могли бы вы представить, как выглядит ваш раздел конфигурации log4net или, по крайней мере, как вы его настроили? Мое лучшее предположение заключается в том, что этот ответ является правильным, поскольку вы настроили внутреннюю отладку log4net. Либо это, либо у вас есть источник log4net в вашем проекте, и вы его компилируете с помощью собственного кода. Это заставит его забрать ваши конфигурации и запустить его таким же образом.

Ответ 6

Хорошо, он говорит, что для уровня корневого регистратора установлено значение DEBUG. Без доступа к вашему конфигурационному файлу или коду, из которого запускается ведение журнала, я бы предположил, что вы неявно используете значения по умолчанию для корневого регистратора, который

  • Переход к командной строке (stdout) и
  • DEBUG по умолчанию

Ответ 7

просмотрите log4net faq. они действительно имеют все те общие ошибки, с которыми вы могли столкнуться.

Ответ 8

У меня такая же проблема, как и у OP. В log4net.config я установил debug = false. У меня также есть один набор FileAppender с установленным шаблономLayout. Когда я использую log.Warn( "test" ), я получаю ожидаемые отформатированные результаты, записанные в ожидаемый txt файл. Тем не менее, я также получаю более подробную строку, написанную на консоли (stdout).

РЕДАКТИРОВАТЬ: Исправление для меня заключалось в том, чтобы устранить эту строку в моем коде BasicConfigurator.Configure();  Обратите внимание, что ничего, явно сообщающее log4net для записи на консоль и объявленное FileAppender, было указано в моей конфигурации. Фактически, log4net debug = false был объявлен, и проблема продолжала сохраняться. Код примера на домашней странице log4net небрежно вызывает BasicConfigurator.Configure(); Хотя я использую log4net, библиотека испытывает те же проблемы многих амбициозных проектов с открытым исходным кодом. Существуют длинные конфигурации, основанные на XML, чтобы предоставить разработчикам тысячи опций для задачи, которая должна иметь более удобный интерфейс. Программисты не склонны оценивать время друг друга. Мы применяем правило "не заставляй меня думать" в наших пользовательских интерфейсах, но не в наших машинных интерфейсах. Как будто мы презираем основной принцип, универсальный для хорошего дизайна. Сложности должны быть доступны разработчику, но несколько часов не должны быть потеряны для выполнения основных функций. Учитывая это, я бы сказал, что log4net плохо разработан. Как и в случае с большинством программ, существует много сложностей для сложности. Если разработчики, руководившие проектом, были более талантливы, наиболее распространенный вариант использования библиотеки (ссылаясь на ее использование для записи в текстовый файл в папке приложения) можно было бы реализовать с 5-10 минутами разоблачения без каких-либо предшествующих знаний. Это не тот случай, потому что дизайн интерфейса и методология настройки. Это подчеркивает причину, по которой я ненавижу то, как думают многие разработчики программного обеспечения. Они неспособны увидеть экспоненциальную ценность простоты для наиболее распространенных случаев использования и вместо этого предполагают, что более загадочные они делают интерфейс более ценным, чем он добавит другим разработчикам. Они управляются эго и невежеством. Неудивительно, что большинство из них являются изгоями общества.

Ответ 9

В приложении, которое я унаследовал, была строка:

<appSettings>
   <add key="log4net.Internal.Debug" value="true"/>

Изменение этого параметра на false устраняет проблему.