Включение уровней журнала в log4net - PullRequest
11 голосов
/ 10 марта 2011

Я пишу простой тестовый проект, чтобы поэкспериментировать с log4net, и я ударил стену сразу.Независимо от того, что я делаю в моем конфигурационном файле, мой регистратор инициализируется со всеми флагами «IsXXXXEnabled», установленными в false.Вот мой очень простой app.config:

  <log4netgroup>
    <log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
        <param name="LogName" value="Application" />
        <param name="ApplicationName" value="HelloProgram" />
        <threshold value="DEBUG"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger - %newline%message" />
        </layout>
      </appender>

      <root>
        <level value="DEBUG" />
        <appender-ref ref="EventLogAppender" />
      </root>
      <logger name="HelloLogger">
        <level value="DEBUG" />
        <appender-ref ref="EventLogAppender" />
      </logger>
    </log4net>
  </log4netgroup>

Вот тривиальный тест в Main:

    ILog Log = LogManager.GetLogger("HelloLogger");

    if(Log.IsErrorEnabled)
        Console.WriteLine("The logger is working!");
    else
        Console.WriteLine("Nope");

Вывод «Нет».Я попытался переключить пороговые значения и значения уровня на «ВСЕ», но ничего не изменилось.Это кажется таким простым, что мне не хватает, чтобы включить все?Спасибо

Ответы [ 4 ]

16 голосов
/ 10 марта 2011

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

[assembly:XmlConfigurator(Watch = true)]

Найдено здесь: Какнастроить log4net так, чтобы log.IsDebugEnabled имел значение true?

4 голосов
/ 10 марта 2011

Вы должны настроить root logger :

<root>
    <level value="DEBUG" />
    <appender-ref ref="EventLogAppender" />
</root>

Любые регистраторы без полномочий root (те, которые вы создаете с помощью <logger name="...">) применяются только к классам, чье имя с указанием пространства имен имеет имя регистратора в качестве префикса. Таким образом, созданный вами регистратор будет применяться только к классам, которые находятся за пределами пространства имен и имеют имя HelloLogger, или к любым классам, находящимся в пространстве имен с именем HelloLogger (и, возможно, в пространствах имен, вложенных в это пространство). (Когда я говорю, что регистратор «относится» к классу X, я имею в виду, что именно этот регистратор вы получите, когда вызовете LogManager.GetLogger(typeof(X)).)

Редактировать: Вам также нужно позвонить log4net.Config.XmlConfigurator.Configure();, чтобы log4net прочитал App.config. Также удалите внешний элемент <log4netgroup> и переименуйте имя раздела конфигурации: <section name="log4net" .../>.

0 голосов
/ 02 декабря 2012

Если вы используете отдельный файл конфигурации для log4net, сделайте следующее: выполнив все остальные инструкции по установке, убедитесь, что щелкните правой кнопкой мыши файл в обозревателе решений Visual Studio, выберите свойства, разверните опцию «Дополнительно» группу, установите значение «Копировать в выходной каталог» как «Копировать всегда». Это сделает волшебство ... :) ура !!

0 голосов
/ 10 марта 2011

Настройка корневого регистратора не является строго необходимой, но аргумент Aasmund, безусловно, действителен.Я думаю, что проблема в том, что вы пытаетесь использовать EventLogAppender.Для простых тестов вы должны использовать ConsoleAppender, поскольку это, вероятно, самый простой приложение, которое вы можете заставить работать в консольном приложении.

EventLogAppender требует некоторых дополнительных шагов для настройки: вам нужно создать источник события, и это требуетадминистративные права.Appender пытается сделать это на лету, но обычно он молча завершается неудачей, если включен UAC.Чтобы увидеть, если это проблема, вы можете попробовать включить внутреннюю отладку .

Обычно вы создаете источник событий с помощью программы установки.

...