log4net:如何动态设置记录器文件名? [英] log4net: How to set logger file name dynamically?

查看:399
本文介绍了log4net:如何动态设置记录器文件名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个非常普遍的问题,但是我无法获得工作上的答案.这是我的配置文件:

This is a really common question, but I have not been able to get an answer to work. Here is my configuration file:

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="CraneUserInterface.log" />
    <appendToFile value="true" />
    <maxSizeRollBackups value="90" />
    <rollingStyle value="Size" />

    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date - %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="RollingFile" />
  </root>

但是我需要在运行时确定实际的日志文件名.我找到了一个很好的示例

But I need to determine the actual logging file name at run time. I found a nice example here, but when I try to loop through the collection returned by the call to GetIterators(), I find that that collection is empty.

我需要将名称"CraneUserInterface.log"更改为"CraneUserInterface_1.log"或2或3,具体取决于程序在运行时读取的内容.我该怎么办?

I need to change the name "CraneUserInterface.log" to "CraneUserInterface_1.log", or 2, or 3, depending on something the program reads at run time. How can I do that?

这是我第一次使用该示例中提供的代码:

Here's my first pass at using the code presented in that sample:

static bool ChangeLogFileName(string AppenderName, string NewFilename)
{           
   // log4net.Repository.ILoggerRepository RootRep;
   // RootRep = log4net.LogManager.GetRepository();
   log4net.Repository.ILoggerRepository RootRep = m_logger.Logger.Repository;
   foreach (log4net.Appender.IAppender iApp in RootRep.GetAppenders())
   {
   string appenderName = iApp.Name;
   if (iApp.Name.CompareTo(AppenderName) == 0
       && iApp is log4net.Appender.FileAppender)
   {
       log4net.Appender.FileAppender fApp = (log4net.Appender.FileAppender)iApp;
       fApp.File = NewFilename;
       fApp.ActivateOptions();
       return true; // Appender found and name changed to NewFilename
   }
}
return false; // appender not found
}

非常感谢!

推荐答案

要使用%property"为文件名定义一个动态标记"(在运行时)?

What about to use "%property" to define a dynamic 'tag' to the file name (at runtime) ?

<file type="log4net.Util.PatternString" value="~/App_Data/%property{LogName}" />

此处解释:动态设置附加程序文件的最佳方法路径

这篇关于log4net:如何动态设置记录器文件名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆