log4net - 通过 XML 文件*和*代码配置 log4net appender

标签 log4net appender rollingfileappender log4net-configuration

我今天开始玩 log4net,到目前为止,我真的很喜欢它。为了保留我们当前的日志记录功能,应用程序需要在应用程序启动时创建一个新的日志文件。日志文件名中包含编码的日期和时间戳。目前,我已经通过 XmlConfigurator 配置了 log4net,效果很好,只是我的 RollingFileAppender 的文件名硬编码在配置 XML 文件中。

我想继续使用 XmlConfigurator,但是在调用 Configure() 之后,我想获取 RollingFileAppender 并且,在代码中,将其文件值更改为动态生成的字符串。 sample documentation online现在似乎已经崩溃了,但我已经浏览了 SDK 引用资料,看起来我可以使用 HeirarchyGetAppenders() 来做我需要做的事情做。我走在正确的轨道上吗?

好的,我对此进行了尝试并尝试了以下代码,但没有用:

private static readonly ILog _log = LogManager.GetLogger(typeof(GUI));
// in the config file, I've set the filename to example.log, and it works
XmlConfigurator.Configure(new FileInfo("log_config.xml"));
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null) {
    // get the appenders
    IAppender[] appenders = hierarchy.GetAppenders();
    // change the filename for the RollingFileAppender
    foreach( IAppender a in appenders) {
        RollingFileAppender rfa = a as RollingFileAppender;
        if(rfa == null)
            continue;
        rfa.File = "newfile.log"; // no runtime error, but doesn't work.
    }
}
_log.Info("Application started");

最佳答案

试试这个片段:

XmlConfigurator.Configure();

log4net.Repository.ILoggerRepository repo = LogManager.GetRepository();
foreach (log4net.Appender.IAppender appender in repo.GetAppenders())
{
if (appender.Name.CompareTo("RollingFileAppender") == 0 && appender is log4net.Appender.RollingFileAppender)
{
   var appndr = appender as log4net.Appender.RollingFileAppender;
   string logPath = "MyApplication.log";
   appndr.File = logPath;
   appndr.ActivateOptions();
}

我发过类似的文章here

关于log4net - 通过 XML 文件*和*代码配置 log4net appender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2807334/

相关文章:

c# - log4net 配置 - 找不到部分

c# - Log4Net 未在 MaxFileSize 上滚动

grails - 如何从Grails Log4j Appender中排除软件包

java - 在 Logback 中使用 getAppender()

java - 如何将 log4j2 jul 桥与自定义控制台 appender 插件一起使用

java - 使用 log4j 每天创建新的日志文件

java - 在控制台中禁用自定义记录器打印 (Log4j2)

c# - 在 asp.net core 3.1 中使用 log4net 和 Microknights 登录数据库无效

.net - Log4net 不会登录到控制台(WinForms 应用程序)

c# - Log4net:在创建的文件名中附加时间戳