Log4Net в WCF не работает - PullRequest
       21

Log4Net в WCF не работает

5 голосов
/ 05 января 2011

Привет. Я пытаюсь использовать Log4Net в WCF IIS, но он не регистрирует никаких данных.Кто-нибудь достиг входа в службу WCF с использованием Log4Net?

Ответы [ 4 ]

8 голосов
/ 05 января 2011

Я успешно использую log4net в своем проекте в автономном приложении WCF.

Наши шаги по настройке довольно просты.

  1. Добавить ссылку на log4net.dll в наш хост-проект службы консоли (точка входа в наше приложение)
  2. Добавьте следующую строку в файл AssemblyInfo.cs вышеупомянутого проекта (позволяет указать пользовательский файл конфигурации log4net, который log4net будет «следить» за обновлениями. Быстро, но, возможно, немного грязно ..)

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

  3. Добавить файл log4net.config в консольный проект и скопировать его в выходной каталог (свойства файла: «Копировать в выходной каталог»)

  4. Добавить ссылку log4net.dll ко всем проектам, для которых требуется ведение журнала
  5. Объявите регистратор как частный статический член классов, для которых вам нужно вести журнал:

     private static readonly log4net.ILog Logger = 
     log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
  6. Журнал, где требуется:

    Logger.Info("Starting console service host");

Эта статья в значительной степени описывает это: http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

1 голос
/ 01 апреля 2013

Еще одна вещь, о которой следует помнить, - это когда у вас есть пользовательский WCF ServiceHostFactory, определенный в отдельной сборке для вашей конечной точки Wcf (например, для сохранения DRY), тогда сборка, в которой определен завод, является "корневой" сборкой изТочка зрения log4net и атрибута XmlConfigurator должны быть объявлены в этой сборке.

Этот FAQ http://logging.apache.org/log4net/release/faq.html#trouble-webapp-stops-logging и связанные комментарии объясняют, что log4net хочет инициализироваться как можно скорее

0 голосов
/ 19 мая 2012

Я использую log4net в MSMQ-службе WCF, размещенной в IIS 7. Я использую Ninject для внедрения зависимостей и установил Ninject.Extensions.Wcf , Ninject.Extensions.Logging.log4net Пакеты NuGet и добавленный раздел конфигурации log4net в файл Web.config.

Я видел, как люди предлагали добавить код инициализации log4net в Global.asax, но, насколько я могу судить, это не работает для сервисов, активированных MSMQ. Однако Ninject устанавливает пакет WebActivator , который позволяет запускать код инициализации при запуске веб-приложения. Ninject помещает свой собственный код в App_Start \ NinjectWebCommon.cs . Для настройки log4net необходимо добавить код в метод Start. Моя выглядит так:

public static void Start() 
{
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));

    // configure log4net
    XmlConfigurator.Configure();

    bootstrapper.Initialize(CreateKernel);
}
0 голосов
/ 05 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...