Я столкнулся с проблемой при попытке войти в приложение с помощью log4net.
Мое приложение состоит из службы WCF и подключающихся к ней клиентов.
Регистрация на стороне клиента не является проблемой, все работает отлично.
Вот как устроена моя серверная сторона:
- DLL WCF, которая содержит контракт моей службы и базовую реализацию (включая обработку ошибок). Фактические операции выполняются на отдельном бизнес-уровне, который генерирует необходимые исключения, которые перехватываются реализацией (и отправляются обратно с использованием 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. Есть проблема. Файл журнала не создан.
Я гуглил и нашел некоторые подсказки (права доступа вообще, но я использовал 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), но безуспешно.
Спасибо за помощь, любая идея приветствуется!