Как я могу получить log4net для записи в имя файла на основе класса, который создает экземпляр регистратора? - PullRequest
4 голосов
/ 28 июня 2010

Это моя дилемма.У меня есть RollingFileAppender.У меня есть BufferingForwardingAppender.Приложение пересылки пишет в файл приложения.Мой файл appender нуждается в файле для записи.Я хочу, чтобы файл назывался так: %Called Assembly Type%log.txt, где% Called Assembly Type% - это вызываемый тип сборки (вздох!)

Я собираюсь использовать это следующим образом:

Звонок из службы под названием "OkilyDokily":

var log4NetLogger = LogManager.GetLogger(GetMyAssemblyName());
log4NetLogger.LogInfo("Toodleoo");

Звонок из службы под названием "Neighborinos":

var log4NetLogger = LogManager.GetLogger(GetMyAssemblyName());
log4NetLogger.LogInfo("Toodleoo");

Я ожидаю иметь 2 файла журнала, один из которых называетсяOkilyDokilylog.txt и один с именем Neighborinoslog.txt

Есть ли способ сделать это в log4net?Моя BufferingForwardingAppender будет проблемой?Я пробовал эту конфигурацию, но %logger просто переводит в строку logger: (

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString">
        <conversionPattern value="C:\testlogs\%logger log.txt" />
    </file>
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="5KB" />
    <staticLogFileName value="true" />
    <countDirection value="1"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-8level %-21date{M/d/yyyy H:m:ss} %message%newline" />
    </layout>
</appender>

1 Ответ

2 голосов
/ 28 июня 2010

Может быть, этот маленький кусочек может помочь вам: вам нужно переопределить RollingFileAppender и после изменения свойства File вызвать метод ActivateOptions, как показано ниже:

var myPath = "C:\\";
var log = LogManager.GetLogger(typeof(MySpecificAssembly).Name);
XmlConfigurator.Configure();

var rfa = (RollingFileAppender)LogManager.GetRepository().GetAppenders()
    .First(c => c.Name == "RollingFileAppender");

rfa.File = myPath + typeof(MySpecificAssembly).Name + ".log";
rfa.ActivateOptions();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...