我正在尝试自定义log4net文件路径以使用我在log4net.GlobalContext.Properties
字典中设置的属性。
log4net.GlobalContext.Properties["LogPathModifier"] = "SomeValue";
我可以看到在通过它调试时正确设置了这个值。然后在我的配置
<file type="log4net.Util.PatternString"
value="Logs\%appdomain_%property{LogPathModifier}.log" />
然而,这个输出给了我路径末尾的“_(null).log”。是什么给了什么?
答案 0 :(得分:57)
我遇到了同样的行为并通过在调用XmlConfigurator之前设置全局变量来解决它...这是我成功使用的:
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");
}
希望这会有所帮助......
答案 1 :(得分:16)
将type = log4net.Util.PatternString
添加到文件元素
答案 2 :(得分:4)
问题(我认为)是您在设置名称并加载配置之前获取(GetLogger)记录器...
尝试将记录器声明为: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
答案 3 :(得分:1)
是否已通过应用程序中的全局或主方法初始化记录器?可能是GlobalContext还没有初始化。