Я искал по всему миру свое решение (включая соответствующие вопросы о stackoverflow), но еще не нашел ответа, который исправляет мою проблему. Я успешно использовал log4net в рабочем проекте, и когда я запускаю программу в visual studio, я получаю свой файл журнала. Если я установлю программу с помощью установщика MSI (wix), то я НЕ получаю файл журнала. Сначала я перечислил все, что я пробовал, а затем отредактированную версию моего кода.log4net не создавая файл журнала при установке
Кроме того, где-либо я говорю «appname», я фактически не использовал appname, просто сохраняя название проекта вне должности.
Я положил файл журнала в $ {} USERPROFILE \ AppData \ Local [имя_приложения] каталог, права доступа не являются проблемой.
Поскольку файл конфигурации, который присутствует в установленной версии, является appname.exe.config вместо app.config, я сменил инструкцию Assemblyinfo.cs для сборки appname.exe.config. Это, однако, не решило мою проблему, она по-прежнему работает только при работе в visual studio, установленной версии нет.
У меня есть модифицированный продукт. 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);
Спасибо! Так оно и было, причина, по которой я указал файл, связана с устранением неполадок, которые я изначально выполнял при интеграции Log4Net. По какой-то причине я не получал файл журнала с вышеуказанным оператором. Возможно, я что-то пропустил, так как теперь он работает во время работы в VS и после его установки. Информация, которая является ключевым здесь, что я не нашел в других ответах, был log4net, ожидающий элемент log4net в качестве корня, если вы явно укажете конфигурационный файл в assemblyinfo.cs. – Josh
Peter, Недавно я прочитал статью, которую вы написали об интерфейсе 'ICommand', с помощью одного метода' Execute' (или любого другого имени), плюс использование декораторов и стратегий как средство для реализации АОП, но для жизни я могу " t найти его снова. Можете ли вы предоставить мне ссылку? – ErikE