В настоящее время я запускаю службу Windows, которая создает несколько экземпляров класса.
В верхней части класса сервиса и каждого другого класса в моем решении у меня есть что-то вроде этого:
private static readonly ILog _log = LogManager.GetLogger(typeof(SomeClassTypeHere));
В моем приложении App.config у меня Log4Net настроен для одного файла:
<log4net debug="true">
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\SomeLogFileName.xml" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<countDirection value="1" />
<maxSizeRollBackups value="30" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j">
<locationInfo value="true" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
Это отлично работает во многих отношениях, и все регистрируется в одном файле. Тем не менее, мне бы очень хотелось создать отдельный файл журнала для каждого экземпляра определенного класса, который создает мой сервис.
Это класс, который нам часто нужно отслеживать для поддержки, и у нас может быть несколько экземпляров, запущенных одновременно.
Мы не знаем, какие экземпляры будут выполняться в данный момент времени, поэтому он делает создание статических файлов в конфигурации более болезненным.
Я попытался снять модификатор readonly и установить в конструкторе класса следующее:
_log = LogManager.GetLogger("DataCollectionClass_" + deviceName + "_" + DateTime.Now.ToString("MMddyyyy"), typeof(SomeClassTypeHere));
Но для этого требуется, чтобы я определял приложение вручную в конфигурации, что было бы громоздким и жестким, чтобы не отставать.
Любые мысли об этом в L4N? Я видел ссылки здесь, но на самом деле не знаю, нужна ли такая каркас.