我不太确定发生了什么,但是我的日志记录代码只有在每次调用XmlConfigurator.Configure()后才能写入rollingFileAppender。我已经在以下代码中打开了调试功能,并确认当Configure仅在构造函数中被调用一次时,它确实在读取我的配置文件,但是当Log()实际被调用时,日志文件上没有任何反应或者在调试窗口中显示。
如果我取消Log()中的那个Configure()调用并让其在每次调用时重新配置,则可以正常工作,但我认为这不是预期的用法。
额外加分!- 我注意到第一次调用log.Info()时不会记录日志,但是在每次进程运行中的所有后续调用都很好。
谢谢!
如果我取消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>