log4net.GlobalContext.Properties
辞書で設定したプロパティを使用するようにlog4netファイルパスをカスタマイズしようとしています。
log4net.GlobalContext.Properties["LogPathModifier"] = "SomeValue";
デバッグすると、この値が正しく設定されていることがわかります。そして私の構成で
<file type="log4net.Util.PatternString"
value="Logs\%appdomain_%property{LogPathModifier}.log" />
ただし、この出力では、パスの最後に「_(null).log」が表示されます。何ができますか?
私は同じ動作に遭遇し、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");
}
お役に立てれば...
Type = log4net.Util.PatternString
をFile要素に追加します
問題(私は思う)は名前を設定して設定をロードする前にロガーをGET(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
ロガーはアプリケーションのグローバルメソッドまたはメインメソッドを介して初期化されましたか? GlobalContextがまだ初期化されていない可能性があります。