Мы используем log4net и хотим указать его конфигурацию во внешнем файле конфигурации (как мы это делали с другими разделами). Для этого мы изменили раздел log4net в App.config на:
...
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
...
<log4net configSource="Log.config" />
...
И в файле Log.Config (тот же каталог, что и App.config) у нас есть:
<log4net>
<appender name="General" type="log4net.Appender.FileAppender">
<file value="myapp.log" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<appender-ref ref="General" />
</root>
</log4net>
Однако при запуске приложения файл журнала не создается (и журнал не ведется). На консоль не выводятся сообщения об ошибках.
Если мы переместим содержимое файла Log.config обратно в App.config (заменив первую строку кода выше), он будет работать должным образом. Есть идеи, почему он не работает во внешнем файле?
Ответы:
Есть ли в вашем
AssemblyInfo.cs
файле следующий атрибут :и код, подобный этому, в начале каждого класса, который требует функции ведения журнала:
У меня есть сообщение в блоге, содержащее эту и другую информацию здесь .
источник
В этом вопросе есть открытый недочет . Log4Net не поддерживает атрибут configSource элементов конфигурации. Чтобы использовать решение только с файлом конфигурации, используйте ключ log4net.Config в appSettings.
Шаг 1. Включите определение раздела нормальной конфигурации:
Шаг 2: Используйте волшебный ключ log4net.Config в appSettings.
Шаг 3: Внесите патч для исправления обработки configSource.
источник
Пропущенный шаг -
это приведет к использованию configSource. Обязательно вызовите его один раз перед вызовом GetLogger ();
источник
Убедитесь, что ваш файл log4net.config имеет следующие свойства:
Действие сборки: контент
Копировать в выходной каталог: копировать всегда
источник
Либо используйте,
или просто,
В обоих случаях файл Log4Net.config должен находиться в каталоге вывода. Вы можете сделать это, установив свойства файла Log4Net.config в обозревателе решений. Действие сборки - содержимое и копирование в выходной каталог - всегда копировать
источник
Остерегайтесь этой проблемы ...
В моем случае все было настроено правильно. Проблема в том, что я использовал Web Deploy внутри Visual Studio 2013 для загрузки сайта на WinHost.com и сбросил списки управления доступом на сервере. Это, в свою очередь, аннулировало все права доступа к папкам и файлам - log4net не смог записать файл.
Вы можете прочитать больше об этом здесь:
Как запретить Web Deploy / MSBuild испортить разрешения сервера
Я попросил техподдержку сбросить ACL, а затем log4net начал выдавать логи. :)
источник
Предполагая, что у вас есть внешний файл конфигурации с именем log4net.config, который копируется в каталог развертывания, вы можете настроить его следующим образом:
using System; using System.Collections.Generic; using System.Windows.Forms; using System.Reflection; using log4net; namespace MyAppNamespace { static class Program { //declare it as static and public so all classes in the project can access it //like so: Program.log.Error("got an error"); public static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program)); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { //configure it to use external file log4net.Config.XmlConfigurator.Configure(new Uri(Application.StartupPath + "\\log4net.config")); //use it log.Debug("############# STARING APPLICATION #################"); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormMain()); } } }
источник
У меня была такая же проблема, кроме того, что
в работающем проекте у меня также была следующая строка в эталонном проекте:
Когда я удалил эту строку в упомянутых проектах, журналы начали появляться.
источник
Также можно включить режим отладки для
log4net
. Вставьте это в файл App.config:и вы, по крайней мере, будете получать сообщения об ошибках, из которых сможете понять, что именно пошло не так. В моем случае я просто забыл установить
Copy to output directory
наCopy Always
.источник
@Mitch, оказывается есть файл с объявлением [assembly: ...], но у него не было свойства ConfigFile.
Как только я добавил его и указал на Log.config, он начал работать. Я бы подумал, что он будет работать, как и все другие разделы конфигурации (например, AppSettings), и принимать внешние файлы конфигурации без каких-либо изменений.
У нас нет второго утверждения, о котором вы упомянули, поскольку мы оборачиваем его в глобальный поставщик статических журналов.
источник
В моем случае я получил это сообщение об ошибке:
И
log4net.config
файл был в проекте Visual Studio 2017, но когда я проверил файл вbin\Debug
папке, я не смог его найти.Моя первоначальная установка сборки была такой:
После некоторого времени исследования я меняю его на следующее, и оно работает:
источник
[сборка: log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.config")]
измените Копировать в выходной каталог на Копировать, если новее
источник
Также стоит отметить, что в веб-приложении он ищет в корневом каталоге, а не в папке bin, поэтому убедитесь, что вы поместили туда файл конфигурации.
источник