Log4net работает только при вызове XmlConfigurator.Configure() - программирование
Подтвердить что ты не робот

Log4net работает только при вызове XmlConfigurator.Configure()

Я понимаю, что this question имеет спросил несколько раз, но, к сожалению, мне не удалось настроить мою конфигурацию ведения журнала. Я должен делать какую-то очень небольшую ошибку где-то.

У меня есть веб-приложение .NET 4.5 MVC 4/EF 5, и я пытаюсь заставить logging работать. Решение имеет два проекта: один для объектов DAO и модели, а другой для веб-сайта. Файл App.Config выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="RebuildingTogetherEntities" connectionString="stuff..."/>
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <log4net configSource="Log.config" />
</configuration>

Тот же раздел log4net также скопирован в файл Web.Config.

Я добавил следующие файлы AssemblyInfo.cs:

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

"Копировать в каталог вывода" установлено значение true для файлов Log.Config.

Единственный способ, с помощью которого я могу зарегистрироваться, чтобы добавить к выходному файлу, - это вызвать XmlConfigurator.Configure() перед запуском первого оператора ведения журнала. Наверное, я могу написать фасад, чтобы сделать это, когда я впервые получаю регистратор, но это просто неправильно.

Как я могу инициализировать регистратор без вызова XmlConfigurator вручную?

4b9b3361

Ответ 1

Я столкнулся с такой же проблемой. Как вы правильно отметили, вам не нужно явно вызывать XmlConfigurator, когда вы включаете строку в свой AssemblyInfo.cs. Проблема возникает, когда первое использование log4net происходит в assebmly, у которого нет этой строки. В моем случае я использовал пакет Topshelf.Log4Net NuGet и первую строку журнала, через которую было зарегистрировано мое приложение.

Вы можете просто зарегистрировать строку в начале своего приложения, или если вам не нужно регистрировать что-либо, сделайте то, что я сделал, и добавьте следующее в точку входа приложения

LogManager.GetLogger(typeof(Program));

Ответ 2

Вам не нужно вызывать XmlConfigurator вручную, если вы используете:

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

Однако вы должны добавить тег ко всем вашим dll (все файлы assambly.cs).