質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.05%

c# log4net ファイル名を動的に変更する方法

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 4,063

score 13

Log4netについて
動的にファイル名を変更する方法が分かりません。
お分かりの方がおられましたら、ご教授お願いします。

出力先の1回目と2回目に分けることはできたのですが、
ファイル名を変更する方法が分かりません。
試しに
appender.File = @"C:\work\Log4NetTest\bin\Debug\Log\test.log";
等、appender.Fileの値を変更すると、「test.log.20190701.log」みたいに、
ファイル名の後に実行したシステム日付が付いてしまいます。

// log4netの設定ファイル
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net>
    <appender name="ABC" type="log4net.Appender.RollingFileAppender">
      <File value=".\Log\" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <staticLogFileName value="false" />
      <datePattern value='yyyyMMdd".log"' />

      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d[%t] %p - %m%n"/>
      </layout>
    </appender>

    <root>
      <level value="ALL" />
      <appender-ref ref="ABC" />
    </root>
  </log4net>
</configuration>
// main.cs
namespace Log4NetTest {
    class Program {
        static void Main(string[] args) {

            // C:\work\Log4NetTest\bin\Debug\Log\yyyymmdd.log (ファイル名はシステム日付:20190701.log)
            Log4NetClass log1 = new Log4NetClass("LOGGRT_A");
            log1.Log4NetMethod("1回目");

            // C:\work\Log4NetTest\bin\Debug\Log\sample.log(ファイル名を任意の名前に変更したい)
            Log4NetClass log2 = new Log4NetClass("LOGGRT_B");
            log2.Log4NetMethod("2回目");
        }
    }
}
namespace Log4NetTest {
    public class Log4NetClass {

        //private static ILog logger = null;
        private ILog logger = null;

        public Log4NetClass(string loggerName) {
            logger = LogManager.GetLogger(loggerName);
            var rootLogger = ((Hierarchy)logger.Logger.Repository).Root;
            FileAppender appender = rootLogger.GetAppender("ABC") as FileAppender;ふぁいるめいはしすてむじかん
            string filepath = appender.File;

            // 出力先フォルダとログファイル名をC#で変更したい
            appender.File = @"C:\work\Log4NetTest\bin\Debug\Log\";

            appender.ActivateOptions();
            //System.IO.File.Delete(filepath); // -> 不要?
        }

        public void Log4NetMethod(string msg) {
            logger.Info(msg);
            logger.Info("★");
            logger.Error("■");
            logger.Warn("▲");
            logger.Debug("●");
        }
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る