Как отключить сообщения о состоянии 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]

и продолжается до тех пор, пока не будет описана полная реализация объекта регистратора.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
0
11 976
9

Ответы 9

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

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

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

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

  1. Переходит в командную строку (stdout) и
  2. по умолчанию DEBUG

пожалуйста, посмотрите log4net часто задаваемые вопросы. у них действительно есть все те распространенные ошибки, с которыми вы можете столкнуться.

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

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

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

установить 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>

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

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

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

log4net.Config.BasicConfigurator.Configure();

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

log4net.Config.XmlConfigurator.Configure();

В унаследованном мной приложении была строчка:

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

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

Другие вопросы по теме