Как настроить log4net для службы Windows c # - PullRequest
13 голосов
/ 22 октября 2009

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

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

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

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

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

есть идеи?

Параг

Ответы [ 2 ]

21 голосов
/ 22 октября 2009

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

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

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

global.asax: <% @ Application Language = "C #" Inherits = "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, вы можете установить атрибут в вашей сборке информация, так что log4net знает, где ищите файл конфигурации. AssemblyInfo.cs (в вашем App_Code папка):

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

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

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

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

13 голосов
/ 06 июля 2012

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

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

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

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