Как настроить log4net для службы С# Windows

У меня есть служба Windows, в которой файл app.config и файлы log4net.config являются отдельными. Запись не работает.

В моем файле app.config у меня есть следующее в разделе:

<add key="log4net.Config" value="log4net.config"/>

Это работает, если в значении я указываю абсолютный путь к файлу log4net.config.

Нужно ли мне указывать абсолютный путь к log4net.cong? Оба файла log4net.config и app.config находятся в той же папке, что и исполняемый файл.

любые идеи?

Параг

Ответы

Ответ 1

Возможно, это полезно (Перемещение конфигурации Log4Net из web.config с веб-сайтами ASP.NET 2.0.).

Вот те части, которые могут вас заинтересовать:

Скажите приложению настроить log4net, используя этот файл конфигурации. Там для этого действительно два места. Первый, global.asax, а затем Файл assemblyInfo.cs. Обратите внимание, что большинство времени, которое вы начнете с Файл global.asax со всем кодом в очереди. По какой-то причине, единственная Я мог бы заставить это работать, чтобы перерыв global.asax для использования кода, а затем осел Файл assemblyInfo.cs. Так оно заканчивается выглядит так.

global.asax: <% @Язык приложения = "С#" Наследует = "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.csApp_Codeпапка):

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

Флаг watch сообщает log4net, чтобы сохранить взглянуть на файл конфигурации для потенциальные изменения. Это полезно, если вы хотите изменить конфигурацию от регистрации только до ошибок в середине вашего тестирования.

Чтобы убедиться, что log4net.config всегда существует, добавьте файл log4net.config в csproject и установите его на CopyAlways. Он должен быть представлен в папке отладки.

Вы можете использовать script, чтобы скопировать все в папку выпуска, или если вы используете проект настройки MS, вручную добавьте этот файл в проект. Затем будет добавлена ​​ссылка.

Ответ 2

Для службы Windows текущий каталог - Windows\system32 - и XmlConfigurator.Configure() использует FileInfo, который обрабатывает относительные пути относительно текущего каталога. Поэтому log4net ищет свой файл конфигурации в Windows\system32.

XmlConfiguratorAttribute, с другой стороны, использует приложение BaseDirectory, поэтому он всегда работает.

В качестве альтернативы вы можете выполнить следующие действия перед вызовом XmlConfigurator.Configure():

System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);