У меня возникла проблема при попытке зарегистрировать мое приложение с помощью 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), но без какого-либо успеха.
Спасибо за помощь, любая идея приветствуется!
Привет, Стефан, спасибо за ваш ответ. Я пробовал ваше последнее предложение (размещение конфигурации в файле web.config), но без успеха ... Я удалил все записи «сборки» из файлов AssemblyInfo, но ничего не меняет ... Я что-то упустил? – Shimrod
См. Мой пересмотренный ответ. Если у вас есть конфигурация в web.config, вам все равно нужно указать log4net для ее загрузки.Извините, что не было объяснено достаточно ясно. –
Он по-прежнему не работает ... Я также пытался жестко кодировать путь к файлу конфигурации и использовать ConfigureAndWatch, но я получаю исключение, исключающее доступ (SecurityException) ... Что действительно странно, поскольку оно находится в том же каталоге, что и приложение. – Shimrod