質問: GSSCommon.GetLogger(SERVICE_NM + port, subDir); gLog.Info("接続確認"); ※ここでは対象のログに出力されている (処理依頼がきたら処理開始) ※ここで最後にGetLoggerしたログファイルに出力されてる gLog.Info("処理開始"); ※以下、その他補足です。 ・スレッドIDを出力してもスレッドIDは異なっていたので、マルチスレッドとしての仕組みは問題なさそうです。 ・処理依頼直後にGetLoggerを再度行えば、傍目から見ればスレッド別に出力されますが、 処理中に別スレッドがGetLoggerしたら出力内容がログファイル別にぐちゃぐちゃになってそうです。 ・起動するスレッド数は50~100程を予定し、1プロセスで20~50程度のスレッド数で予定してます。 ・クラス内のログインスタンスを一度のGetLoggerで他スレッドから上書されないようにしたいです。 以上となりますが、何かご指摘等ありましたら、よろしくお願い致します。
回答: 以下のように修正して解消致しました。 皆様、ご回答、ご指摘ありがとうございました。 public static ILog GetLogger( string ProcessName, string SubFolder = "" ) { ILog newLogger = null; newLogger = log4net.LogManager.GetLogger(ProcessName); log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender() { MaxSizeRollBackups = 10, AppendToFile = true, Encoding = System.Text.Encoding.UTF8, MaximumFileSize = "1000KB", RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Date, StaticLogFileName = false, DatePattern = "'_'yyyyMMdd'.log'", Layout = ・・・ }; if (SubFolder.Length == 0) { appender.File = @"..\Log\" + ProcessName; } else { appender.File = @"..\Log\" + SubFolder + @"\" + ProcessName; } log4net.Repository.Hierarchy.Logger logger = (log4net.Repository.Hierarchy.Logger)newLogger.Logger; appender.ActivateOptions(); logger.AddAppender(appender); logger.Level = log4net.Core.Level.All; logger.Hierarchy.Configured = true; return newLogger; }