Класс регистратора Log4NET

Я новичок в Log4Net, и у меня возникли некоторые проблемы с регистрацией сообщений журнала приложений в файле журнала. Я думаю, что что-то не так с конфигурацией файла Web.config. Это фрагмент того, что у меня есть в web.config:

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

<log4net>
    <root>
    </root>

    <logger name="Tomahawk" additivity="False">
        <level value="ALL" />
        <appender-ref ref="MyFileAppender" />
      </logger>


    <appender name="MyFileAppender" type="log4net.Appender.FileAppender">
      <file value="application.log" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %level %logger - %message%newline" />
      </layout>
    </appender>

  </log4net>

Кроме того, я включил следующую строку в AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

В коде C# ВСЕ я делаю следующее:

ILog log = LogManager.GetLogger("Tomahawk");
log.info("Some debug info...");

Но ничего не происходит. В файле журнала ничего не регистрируется.

Кто-нибудь разбирается в этом вопросе?


person mhenley    schedule 01.02.2017    source источник
comment
Проверьте значение LogManager.GetRepository().Configured, чтобы убедиться, что log4net подбирает конфигурацию — в некоторых случаях атрибут сборки не подбирает ее правильно, например. если атрибут не находится в стартовом проекте. Если он настроен, проверьте права доступа к файлу, позволяющие программе писать в него.   -  person stuartd    schedule 01.02.2017
comment
Здравствуйте, я проверил значение в соответствии с вашим ответом... и значение False. Обходной путь, который я нашел, заключался в вызове метода Configure XmlConfigurator следующим образом: log4net.Config.XmlConfigurator.Configure() при запуске приложения. Делая это... все работало нормально. Мне интересно, почему даже включение атрибута в файл XML web.config не работает...   -  person mhenley    schedule 02.02.2017
comment
Атрибуты хороши, но они могут быть привередливыми. Использование атрибутов может быть более четким методом для определения того, откуда будет загружаться конфигурация приложения… если вы используете атрибуты конфигурации, вы должны вызвать log4net, чтобы позволить ему прочитать атрибуты. Простой вызов LogManager.GetLogger вызовет чтение и обработку атрибутов вызывающей сборки. Поэтому крайне важно сделать вызов ведения журнала как можно раньше во время запуска приложения и, конечно же, до того, как будут загружены и вызваны какие-либо внешние сборки.   -  person stuartd    schedule 02.02.2017
comment
Текст выше взят из logging.apache.org/log4net/release/manual/   -  person stuartd    schedule 02.02.2017


Ответы (1)


Попробуйте следующее:

Шаг 1. Создайте отдельный файл с именем log4net.config.

Шаг 2. Удалите эти строки из XML-файла.

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

Шаг 3. Настройте корневой раздел следующим образом:

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

Шаг 4. Включите в файл Program.cs следующее:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

Шаг 5. В классе Startup.cs заставьте регистратор работать с этой глобальной переменной

private static ILog log = LogManager.GetLogger(typeof(Startup));

Шаг 6. В методе Configure запишите свое информационное сообщение следующим образом.

if (env.IsDevelopment())
{
    log.Info("Yeap! We are in development now! That's great!");

    app.UseDeveloperExceptionPage();
 }

Шаг 7. Откройте файл application.log и Вуаля!!

person Celso Jr    schedule 04.02.2017