2010-09-13 2 views
2

У меня возникла проблема при попытке зарегистрировать мое приложение с помощью log4net. Мое приложение состоит из службы WCF и клиентов, подключающихся к ней. Регистрация на стороне клиента не проблема, все работает отлично.У WAS есть служба WCF и log4net

Вот как сделала моя сторона сервера:

  • ФОС длл, которая содержит контракт моего сервиса и базовую реализацию (включая обработку ошибок). Фактические операции выполняются в отдельном бизнес-слое, который генерирует необходимые исключения, которые пойманы реализацией (и отправляются обратно с использованием FaultContracts).
  • Уровень данных (не проблема здесь).
  • Библиотека «Utils», которая содержит мои методы журнала обертки.

Мой файл log4net.config заключается в следующем:

<?xml version="1.0" encoding="utf-8" ?> 
<log4net debug="false"> 

    <appender name="TechnicalFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> 
    <param name="File" value="c:\\log\\technical.log"/> 
    <param name="AppendToFile" value="true"/> 
    <param name="RollingStyle" value="Date"/> 
    <param name="DatePattern" value="'_'yyyyMMdd-HH"/> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
     <param name="ConversionPattern" value="%d [%-5t] %-5p - %m%n"/> 
    </layout> 
    </appender> 

    <root> 
    <level value="ALL"/> 
    </root> 

    <logger name="TechnicalLog"> 
    <level value="ALL"/> 
    <appender-ref ref="TechnicalFileAppender"/> 
    </logger> 

</log4net> 

Поэтому, когда происходит ошибка в бизнес-уровне, она захватывается, регистрируется и превращается в FaultException. Есть проблема. Файл журнала не создается. Я googled и нашел некоторые подсказки (права доступа вообще, но я использовал ProcMon и не нашел никакого звонка в нужный файл или каталог).

Я немного потерял сейчас, я не знаю, что попробовать.

Я публикую свою службу, используя команду «publish» в visual studio, поэтому на сервере у меня есть каталог приложений, внутри которой есть файл svc, файл web.config, а затем каталог bin со всеми моими DLL включая log4net.dll и log4net.config. Я попытался скопировать этот файл конфигурации в корень моего приложения без успеха.

Я также попытался поместить заявление [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] в AssemblyInfo.cs моей WCF (он был первоначально в AssemblyInfo.cs Utils), но без какого-либо успеха.

Спасибо за помощь, любая идея приветствуется!

ответ

1

Я уверен, что log4net не находит файл конфигурации.

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

В качестве альтернативы вы можете просто скопировать конфигурацию log4net в файл web.config (но я бы этого не сделал, потому что вы потеряли возможность изменять настройки журнала для запущенной системы). В этом случае вам нужно добавить это к вам AssemblyInfo.cs (или какой-либо другой файл, если вы предпочитаете):

[assembly: log4net.Config.XmlConfigurator()] 

Если это все равно не поможет, то я рекомендую включить internal debugging.

+0

Привет, Стефан, спасибо за ваш ответ. Я пробовал ваше последнее предложение (размещение конфигурации в файле web.config), но без успеха ... Я удалил все записи «сборки» из файлов AssemblyInfo, но ничего не меняет ... Я что-то упустил? – Shimrod

+0

См. Мой пересмотренный ответ. Если у вас есть конфигурация в web.config, вам все равно нужно указать log4net для ее загрузки.Извините, что не было объяснено достаточно ясно. –

+0

Он по-прежнему не работает ... Я также пытался жестко кодировать путь к файлу конфигурации и использовать ConfigureAndWatch, но я получаю исключение, исключающее доступ (SecurityException) ... Что действительно странно, поскольку оно находится в том же каталоге, что и приложение. – Shimrod

Смежные вопросы