log4net и домены
От: MaLS Россия https://github.com/maliutin
Дата: 27.01.14 10:52
Оценка:
Здравствуйте

Участвую в разработке WCF сервиса, который работает под IIS.

Для логирования и трассировки используем log4net. Конфигурация такая:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  ...
  <log4net>
    <appender name="DMLogFile" type="log4net.Appender.RollingFileAppender">
      <file value="${ALLUSERSPROFILE}\EDGE\DataService\Logs\" />
      <appendToFile value="true"/>
      <staticLogFileName value="false"/>
      <rollingStyle value="Date"/>
      <datePattern value="yyyy-MM-dd.\D\M.lo\g"/>
      <layout type="log4net.Layout.XmlLayout" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    </appender>
    <logger name="DataManipulation">
      <level value="ALL"/>
      <appender-ref ref="DMLogFile"/>
    </logger>
    <logger name="SeriesComputation">
      <level value="ALL"/>
      <appender-ref ref="DMLogFile"/>
    </logger>
  </log4net>
  ...
</configuration>


Так работало нормально пока в приложении не стали применять домены, т.е. логирование в один и тот же файл происходит из разных доменов. В этом случае, помимо основного файла, например 2014-01-20.DM.log, начали возникать дополнительные файлы, у которых дублируется имя:

2014-01-20.DM.log2014-01-20.DM.log
2014-01-20.DM.log2014-01-20.DM.log2014-01-20.DM.log


была сделана попытка заменить синхронизацию с MinimalLock на InterProcessLock:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  ...
  <log4net>
    <appender name="DMLogFile" type="log4net.Appender.RollingFileAppender">
      <file value="${ALLUSERSPROFILE}\EDGE\DataService\Logs\" />
      <appendToFile value="true"/>
      <staticLogFileName value="false"/>
      <rollingStyle value="Date"/>
      <datePattern value="yyyy-MM-dd.\D\M.lo\g"/>
      <layout type="log4net.Layout.XmlLayout" />
      <lockingModel type="log4net.Appender.FileAppender+InterProcessLock"/>
    </appender>
    <logger name="DataManipulation">
      <level value="ALL"/>
      <appender-ref ref="DMLogFile"/>
    </logger>
    <logger name="SeriesComputation">
      <level value="ALL"/>
      <appender-ref ref="DMLogFile"/>
    </logger>
  </log4net>
  ...
</configuration>


но в этом случае после некоторой работы приложения происходит его зависание. И зависание происходит именно на попытке записи в файл лога.

Таим образом, возникает пара вопросов:

1. Работает ли нормально log4net с различными доменами?
2. Согласно этой рекомендации в нашем случае лучше использовать какой-либо Remoting сервис. Но хотелось бы спросить про EventLog. Не будет ли извращением использовать его в таком сценарии?
----
"Ответить на вопрос — значит согласиться с правильностью его постановки.", Карстен Бредемайер
log4net eventlog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.