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

我试图自定义一个log4net文件path来使用我在log4net.GlobalContext.Properties字典中设置的属性。

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

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

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

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

我遇到了相同的行为,并通过在调用XmlConfigurator之前设置全局variables来解决它…这是我成功使用:

log4net.config详细信息:

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

Global.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"); } 

希望这可以帮助…

将type = log4net.Util.PatternString添加到File元素中

问题(我认为)是你GET(GetLogger)logging器,然后设置名称并加载configuration…

尝试做如下声明logging器: private static log4net.ILog _pLog ,然后在Application_Start中执行:

 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); //Get the loger _pLog = log4net.LogManager.GetLogger("Global.asax"); // Record application startup pLog .Debug("Application startup"); } 

所以顺序是:

 // Set logfile name and application name variables // Load log4net configuration // get the logger // Record application startup 

logging器是通过应用程序中的全局还是主要方法初始化的? 可能是GlobalContext尚未初始化。