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("●"); } } }
あなたの回答
tips
プレビュー