私が書いた構文を検証するために、私より賢い人を見つけようとしています。私のプロジェクトで再利用しやすくするために、RollingFileAppenderのファイル名をアセンブリの名前に構成するという考え方です。
この前のSO記事 を見ましたが、私の質問に正確に答えることができませんでした...
私はLog4netの内部コンポーネントを理解しようと試みてきましたが、これが私が思いついたことです(Global.asaxファイルにあります-Application_Startメソッド):
// Bind to the root hierarchy of log4net
log4net.Repository.Hierarchy.Hierarchy root =
log4net.LogManager.GetRepository()
as log4net.Repository.Hierarchy.Hierarchy;
if (root != null)
{
// Bind to the RollingFileAppender
log4net.Appender.RollingFileAppender rfa =
(log4net.Appender.RollingFileAppender)root.Root.GetAppender("RollingLogFileAppender");
if (rfa != null)
{
// Set the file name based on the Assembly name
string filePath =
string.Format("~/App_Data/{0}.log", GetType().Assembly.GetName().Name);
// Assign the value to the appender
rfa.File = Server.MapPath(filePath);
// Apply changes to the appender
rfa.ActivateOptions();
}
}
「これは恐ろしい」または「これはうまくいくはずです」と誰にでも言うことができますか?また、ファイルを動的に設定した場合、log4net.configファイルの設定に基づいてlog4netの動作がファイルを回転させることを期待できますか?
大変感謝いたします!
あなたはこれを難しい方法でやっています!アプリケーションの構成ファイルでlog4net構成をXMLとして定義し、%property{}
利点:
<appender name="YourAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="~/App_Data/%property{LogName}" />
....
</appender>
これは動的です。log4netプロパティ "LogName
"を設定するだけですbefore log4netを初期化します。したがって、log4netを構成する前の任意のコードで、このプロパティの目的の値を設定します。
string LogName = GetType().Assembly.GetName().Name + ".log";
log4net.GlobalContext.Properties["LogName"] = LogName;
もちろん、任意のプロパティ名を使用できます。簡単な例として「LogName」を選択しましたが、必要に応じてアプリケーションごとに1つ持つことができます。ただし、コードが正しいプロパティ名と正しい値を知っている限りです。
2015年には、次のようにします。
<file type="log4net.Util.PatternString">
<conversionPattern value="%appdomain.log" />
</file>
他のコードは必要ありません。
アプリドメインは、実行中のアセンブリのファイル名です。
実行時に最初のアペンダーのログファイルを設定または変更する方法は次のとおりです。
var appender = (log4net.Appender.FileAppender)LogManager.GetRepository().GetAppenders()[0];
appender.File = "C:\whatever.log";
appender.ActivateOptions();
日付で私のために働いた_<file type="log4net.Util.PatternString" value="./Log/logQueueService%date{yyyy_MM_dd}.log" />