Я понимаю, что thisquestionhasbeenaskedseveraltimes, но, к сожалению, я не был в состоянии получить мою конфигурацию протоколирование работать. Я должен совершать какую-то очень маленькую ошибку.log4net работает только тогда, когда XmlConfigurator.Configure() называется
У меня есть веб-приложение .NET 4.5 MVC 4/EF 5, и я пытаюсь заставить журнал работать. Решение имеет два проекта: один для объектов 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)]
«Копировать в выходной каталог» установлен в положение верно для обоих файлов Log.Config.
Единственный способ, с помощью которого я могу получить регистрацию для добавления к выходному файлу, - это вызвать XmlConfigurator.Configure() перед запуском первого оператора ведения журнала. Наверное, я могу написать фасад, чтобы сделать это, когда я впервые получаю регистратор, но это просто неправильно.
Как инициализировать регистратор без вызова XmlConfigurator вручную?
делает HTTP: // stackoverflow.com/questions/3971250/log4net-configuration-from-assembly-attribute-does-not-load-configuration-file применяются? – sgmoore
Казалось бы, нет ... в этом случае было сообщение от log4net до выключения приложения, но я не вижу этого сообщения в моем случае. Спасибо за предложение. – Brad
Не уверен, что я согласен с вашей логикой. Вы не увидите сообщение log4net, если включено внутреннее ведение журнала, и если ваша система не читает ваш файл log.config, то он, вероятно, не будет включен. Важно то, что когда вы делаете что-то вроде GetLogger (...), система будет в основном делать что-то эквивалентное Attribute.GetCustomAttributes (Assembly.GetCallingAssembly(), typeof (log4net.Config.ConfiguratorAttribute), false). Следовательно, если вы не заходите в систему в начале запуска приложения, ваш первый регистратор может быть инициализирован из сборки, которая не будет продолжать настраиваемый атрибут. – sgmoore