Как настроить log4net для службы c # Windows
-
05-07-2019 - |
Вопрос
У меня есть служба Windows, в которой файлы app.config и log4net.config находятся отдельно.Ведение журнала не работает.
В моем файле app.config у меня есть следующее в разделе:
<add key="log4net.Config" value="log4net.config"/>
Это работает, если в значении я указываю абсолютный путь к файлу log4net.config.
Нужно ли мне указывать абсолютный путь к log4net.cong?Оба файла log4net.config и app.config находятся в той же папке, что и исполняемый файл.
есть какие-нибудь идеи?
Параг
Решение
Может быть, это полезно (Перенос конфигурации Log4Net из web.config с помощью ASP.NET веб-сайтов 2.0.).
Вот те части, которые могут вас заинтересовать:
Сообщите приложению о необходимости настройки войдите в систему с помощью этого конфигурационного файла.Там на самом деле есть два места для этого.Во-первых, глобальный файл.asax и, во-вторых, файл AssemblyInfo.cs.Обратите внимание, что большую часть времени вы будете начинать с глобального файла.asax со всем кодом встроенным.По какой-то причине единственный способ, которым я мог заставить это работать, состоял в том, чтобы разбить global.asax на использование code-behind, а затем использовать файл AssemblyInfo.cs.Так что в итоге все получается выглядит вот так.
глобальный.asax:<%@ Язык приложения="C #" Наследует="GlobalAsax" %> global.asax.cs (в вашей папке App_Code):
using System;
using System.Web;
public class GlobalAsax : HttpApplication
{
// you may have lots of other code here
void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
}
Теперь, когда у вас есть ваше приложение вызывая конфигурацию log4net, вы можете установить атрибут в своей сборке info, чтобы log4net знал, где искать найдите файл конфигурации.
AssemblyInfo.cs
(в вашемApp_Code
папка):
[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Флаг наблюдения указывает log4net следить за файлом конфигурации на предмет возможных изменений.Это полезно, если вы хотите изменить конфигурацию с регистрации всего на ошибки в середине вашего тестирования.
Чтобы убедиться, что log4net.config
всегда есть, добавьте log4net.config в csproject и установите его в CopyAlways
.Он должен быть представлен в папке debug.
Вы можете использовать скрипт, чтобы скопировать все в папку выпуска, или, если вы используете MS setup project, вручную добавить этот файл в проект.Затем будет добавлена ссылка.
Другие советы
Для службы Windows текущим каталогом является Windows\system32 -- и XmlConfigurator.Configure() использует FileInfo, который обрабатывает относительные пути относительно текущего каталога.Итак, log4net ищет свой конфигурационный файл в Windows\ system32.
XmlConfiguratorAttribute, с другой стороны, использует BaseDirectory приложения, вот почему он всегда работает.
В качестве альтернативы, вы можете выполнить следующее перед вызовом XmlConfigurator.Configure() :
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);