Как отключить сообщения о состоянии log4net для консоли? - PullRequest
11 голосов
/ 20 декабря 2008

Я использую 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]

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

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

Ответы [ 9 ]

17 голосов
/ 24 августа 2010

set 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>
15 голосов
/ 14 февраля 2009

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

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

3 голосов
/ 10 ноября 2015

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

log4net.Config.BasicConfigurator.Configure();

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

log4net.Config.XmlConfigurator.Configure();
3 голосов
/ 20 декабря 2008

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

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

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

1 голос
/ 05 июля 2017

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

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

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

1 голос
/ 03 января 2009

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

0 голосов
/ 04 августа 2015

У меня та же проблема, что и у ОП. В 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 минутами экспозиции без каких-либо предварительных знаний. Это не так, потому что дизайн интерфейса и методология настройки. Это подчеркивает причину, по которой я ненавижу то, как думает большинство разработчиков программного обеспечения. Они неспособны увидеть экспоненциальное значение простоты для наиболее распространенных вариантов использования и вместо этого предполагают, что чем удивительнее они делают интерфейс, тем большую ценность он добавит другим разработчикам. Они движимы эго и невежеством. Неудивительно, что большинство из них - изгои.

0 голосов
/ 01 января 2009

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

0 голосов
/ 21 декабря 2008

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

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