如何在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尚未初始化。