ここで何が起こっているのかわかりませんが、すべての呼び出しでXmlConfigurator.Configure()を呼び出さない限り、ロギングコードはrollingFileAppenderに書き込まれません。次のコードでデバッグをオンにしました。コンストラクターでConfigureが1回だけ呼び出された場合、構成がプルされているように見えますが、Log()が実際に呼び出された場合、ログファイルに何も起こりません。デバッグウィンドウに表示されます。Log()でConfigure()の呼び出しのコメントを解除し、呼び出しごとに再構成させると、問題なく機能しますが、それが意図された使用法ではないと思います。
ボーナスポイント!--log.Info()の最初の呼び出しはログに記録されていませんが、プロセスの各実行での後続の呼び出しはすべて正常です。
ありがとう!
public static class LogToFile
{
public const string RollingFileAppenderName = "RollingFileLogger";
static LogToFile()
{
log4net.Config.XmlConfigurator.Configure();
}
public static void Log(string fileNameBase, string message, string context)
{
if (fileNameBase == null) throw new ArgumentNullException("fileNameBase");
if (message == null) throw new ArgumentNullException("message");
if (context == null) throw new ArgumentNullException("context");
//log4net.Config.XmlConfigurator.Configure();
string fileName = string.Format("{0}_{1}.log", fileNameBase, context);
string fullFileName = Path.Combine(Properties.Settings.Default.LogFilePath, fileName);
if (!Directory.Exists(Properties.Settings.Default.LogFilePath)) Directory.CreateDirectory(Properties.Settings.Default.LogFilePath);
LogicalThreadContext.Properties["LogName"] = string.Format(fullFileName);
ILog log = LogManager.GetLogger(RollingFileAppenderName);
log.Info(message);
}
}
<appender name="rollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%property{LogName}" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2MB" />
<countDirection value="-1"/>
<LockingModel value="log4net.Appender.FileAppender+MinimalLock"/>
<staticLogFileName value="false" />
<immediateFlush value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="AlertMessageHandler Message : %-25date [%thread] - %newline%message%newline" />
</layout>
</appender>