2

今日から log4net を使い始めましたが、今のところとても気に入っています。現在のログ機能を維持するために、アプリは、アプリケーションが開始されるたびに新しいログ ファイルを作成する必要があります。ログ ファイル名には、日付とタイム スタンプがエンコードされています。現在、 を介して log4net を構成していますが、これはうまくXmlConfigurator機能しますが、私のファイル名RollingFileAppenderは構成 XML ファイルにハードコードされています。

を引き続き使用したいのですXmlConfiguratorが、 を呼び出した後Configure()、 を取得し、RollingFileAppenderコードでそのファイルの値を動的に生成される文字列に変更したいと考えています。オンラインのサンプルドキュメントは現在ダウンしているようですが、SDK リファレンスをざっと見てみると、必要なことを実行するためにHeirarchyとを使用できるようです。GetAppenders()私は正しい軌道に乗っていますか?

わかりました、私はこれを突き刺し、次のコードを試しましたが、うまくいきませんでした:

private static readonly ILog _log = LogManager.GetLogger(typeof(GUI));
// in the config file, I've set the filename to example.log, and it works
XmlConfigurator.Configure(new FileInfo("log_config.xml"));
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null) {
    // get the appenders
    IAppender[] appenders = hierarchy.GetAppenders();
    // change the filename for the RollingFileAppender
    foreach( IAppender a in appenders) {
        RollingFileAppender rfa = a as RollingFileAppender;
        if(rfa == null)
            continue;
        rfa.File = "newfile.log"; // no runtime error, but doesn't work.
    }
}
_log.Info("Application started");
4

2 に答える 2

8

このスニペットを試してください:

XmlConfigurator.Configure();

log4net.Repository.ILoggerRepository repo = LogManager.GetRepository();
foreach (log4net.Appender.IAppender appender in repo.GetAppenders())
{
if (appender.Name.CompareTo("RollingFileAppender") == 0 && appender is log4net.Appender.RollingFileAppender)
{
   var appndr = appender as log4net.Appender.RollingFileAppender;
   string logPath = "MyApplication.log";
   appndr.File = logPath;
   appndr.ActivateOptions();
}

私はここに同様の記事を投稿しました

于 2010-05-11T11:54:50.713 に答える
2

この場合、ローリング ファイル アペンダが必要ですか? そうでない場合は、通常のファイルアペンダーを使用した場合、コードが目的の結果を作成することを期待しています。

編集:アペンダーを呼び出すと、RollingFile アペンダーで動作する可能性がありますActivateOptions()

于 2010-05-11T11:36:19.353 に答える