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

У меня есть служба Windows, где приложение.конфигурационный файл и log4net.файлы конфигурации разделены. Ведение журнала не работает.

в моем приложении.файл конфигурации, у меня есть следующее В разделе:

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

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

Мне нужно указать абсолютный путь к log4net.Цун? Как такой как log4net.config и App.конфигурационный файл в той же папке, что выполнимый.

какие идеи?

Параг

2 ответов


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

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

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

глобальные.эйсакс: глобальный.асакс.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, вы можно установить атрибут в собрание информация, чтобы log4net знал, где найдите файл конфигурации. AssemblyInfo.csApp_Code папка):

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

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

чтобы убедиться, что log4net.config всегда там, добавьте такой как log4net.сконфигурируйте 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);