【发布时间】:2018-03-18 07:10:07
【问题描述】:
我正在尝试重命名我的日志文件以将其标记为特定值以便于组织目的。例如,当应用程序启动时,会创建 log_Start.txt。用户访问应用程序中的某个模块后,日志文件应重命名为log_Start_ModuleName.txt。
但是,log4net 不会重命名,而是会创建一个名为 log_Start_ModuleName.txt 的新文件,这会给我留下 2 个文件。此外,log_Start.txt 中的所有以前的日志都不会转移到 log_Start_ModuleName.txt 中。
我已经尝试过a solution 和其他人,但他们似乎最终都创建了一个新的日志文件而不是重命名它。
这是我在 App.config 中的代码:
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd-MMM-yyyy HH:mm:ss,fff} %level - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\Logs\Log_Start.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd-MMM-yyyy HH:mm:ss,fff} %level - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
这就是我在代码中重命名文件的方式
public void AppendModuleNameToLogFilename(string moduleName)
{
XmlConfigurator.Configure();
log4net.Repository.ILoggerRepository repo = LogManager.GetRepository();
foreach (log4net.Appender.IAppender a in repo.GetAppenders())
{
if (a.Name.CompareTo("RollingFileAppender") == 0 && a is log4net.Appender.RollingFileAppender)
{
RollingFileAppender fa = (RollingFileAppender)a;
fa.File = String.Format("D:\\Logs\\Log_Start_{0}.txt",moduleName);
fa.ActivateOptions();
break;
}
}
}
这就是我记录东西的方式:
public class ABC{
private static readonly log4net.ILog logMe = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
....
function A(int a)
{
...
logMe.Info("function A done!")
}
}
【问题讨论】: