如何在log4net appender名称中使用GlobalContext属性?

发布时间 2023-10-19 14:18:25作者: China Soft

重点:

type="log4net.Util.PatternString" 

 

我正在尝试自定义log4net文件路径以使用我在log4net.GlobalContext.Properties字典中设置的属性。如何在log4net appender名称中使用GlobalContext属性?

log4net.GlobalContext.Properties["LogPathModifier"] = "SomeValue"; 

我可以看到,通过它进行调试时,该值设置正确。然后在我的配置

<file type="log4net.Util.PatternString" 
     value="Logs\%appdomain_%property{LogPathModifier}.log" /> 

但是,这样的输出给我“_(null).log”在路径的末尾。是什么赋予了?

回答

54

我遇到了相同的行为,并通过调用XmlConfigurator之前设置的全局变量解决它...这就是我成功地利用:

log4net.config细节:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> 
    <File type="log4net.Util.PatternString" value="App_Data/%property{LogName}" /> 
    ... 
</appender> 

全球细节的.asax:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Global.asax"); 
void Application_Start(object sender, EventArgs e) 
{ 
    // Set logfile name and application name variables 
    log4net.GlobalContext.Properties["LogName"] = GetType().Assembly.GetName().Name + ".log"; 
    log4net.GlobalContext.Properties["ApplicationName"] = GetType().Assembly.GetName().Name; 

    // Load log4net configuration 
    System.IO.FileInfo logfile = new System.IO.FileInfo(Server.MapPath("log4net.config")); 
    log4net.Config.XmlConfigurator.ConfigureAndWatch(logfile); 

    // Record application startup 
    log.Debug("Application startup"); 
}