2016-11-29 5 views
0

Я искал по всему миру свое решение (включая соответствующие вопросы о stackoverflow), но еще не нашел ответа, который исправляет мою проблему. Я успешно использовал log4net в рабочем проекте, и когда я запускаю программу в visual studio, я получаю свой файл журнала. Если я установлю программу с помощью установщика MSI (wix), то я НЕ получаю файл журнала. Сначала я перечислил все, что я пробовал, а затем отредактированную версию моего кода.log4net не создавая файл журнала при установке

Кроме того, где-либо я говорю «appname», я фактически не использовал appname, просто сохраняя название проекта вне должности.

  1. Я положил файл журнала в $ {} USERPROFILE \ AppData \ Local [имя_приложения] каталог, права доступа не являются проблемой.

  2. Поскольку файл конфигурации, который присутствует в установленной версии, является appname.exe.config вместо app.config, я сменил инструкцию Assemblyinfo.cs для сборки appname.exe.config. Это, однако, не решило мою проблему, она по-прежнему работает только при работе в visual studio, установленной версии нет.

  3. У меня есть модифицированный продукт. Wxs для доставки log4net.dll и log4net.xml в каталог установки. (забыл сделать это, приложение не запустилось, так что вернулось и добавило его) все равно никаких изменений.

У нас есть 5 проектов в рамках одного решения с использованием log4net. все файлы AssemblyInfo.cs имеет следующее:

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

Я использовал [assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)], но изменили это имя измененного файла конфигурации, который помещается в директории установки и бункере.

Внутри app.config (извиняюсь за возможные опечатки, мой DEV машина airgapped и я не могу копировать вставить код):

<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <log4net> 
     <root> 
      <level value="ALL"/> 
      <appender-ref ref="MyAppender"/> 
     </root> 
     <appender name="MyAppender" type="log4net.Appender.FileAppender"> 
      <file value="${USERPROFILE}\AppData\Local\appname\appname.log"/> 
      <appendToFile value="true"/> 
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date %level - %message%newline"/> 
      </layout> 
     </appender> 
    </log4net> 
</configuration> 

и в моей C# код, где я использую регистратор:

private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

ответ

1

Если ваша конфигурация находится в вашем app.config, вы можете просто использовать:

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

при Spe cify файл, log4net ожидает, что элемент log4net будет как корневой элемент xml. Что не соответствует вашему app.config.

+0

Спасибо! Так оно и было, причина, по которой я указал файл, связана с устранением неполадок, которые я изначально выполнял при интеграции Log4Net. По какой-то причине я не получал файл журнала с вышеуказанным оператором. Возможно, я что-то пропустил, так как теперь он работает во время работы в VS и после его установки. Информация, которая является ключевым здесь, что я не нашел в других ответах, был log4net, ожидающий элемент log4net в качестве корня, если вы явно укажете конфигурационный файл в assemblyinfo.cs. – Josh

+0

Peter, Недавно я прочитал статью, которую вы написали об интерфейсе 'ICommand', с помощью одного метода' Execute' (или любого другого имени), плюс использование декораторов и стратегий как средство для реализации АОП, но для жизни я могу " t найти его снова. Можете ли вы предоставить мне ссылку? – ErikE

0

@erike Я не уверен, что это было мое. Поэтому у меня нет ссылки для вас.

Смежные вопросы