Вопрос

У меня есть служба 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top