私が書いた構文の妥当性を検証するために、私より賢い人を探しています。このアイデアは、自分のプロジェクトにもっと再利用できるように、私のRollingFileAppenderのファイル名をアセンブリの名前に設定することです。アペンダファイルのパスを動的に設定する最も良い方法
私はthis previous SO articleを見てきましたが、まさに私の質問に答えることができませんでした...
私は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の動作が期待できますか?
非常に高く評価されました!
ああ、正確に...それはそれはされている必要がありますよりも、より困難に思えました。ありがとうございました... – Dscoduc
log4netfactoryadapterを使用するときにこれと同等の方法や方法があるかどうか知っていますか?私はすべてのコードでcommon.loggingを使用しており、宣言的に設定(app.config)を定義しています。私はGlobalContextメソッドを試してみましたが、ファイル名に(null)がついてしまい、使用している変数がnullでないことが分かりました。 –
残念ながら、私はlog4netfactoryアダプターに精通していません。 ** log4netが初期化または使用される前にGlobalContext **を使用していますか?プロパティを定義する前にlog4netが使用または初期化されると、それらはnullになります。 – Eddie