不确定这里发生了什么,但我的日志记录代码不会写入 rollingFileAppender,除非我在每次调用时调用 XmlConfigurator.Configure()。我已经在下面的代码中打开了调试,并且可以确认当在构造函数中只调用一次 Configure 时,它似乎确实在拉入我的配置,但是当实际调用 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>