我尝试重命名我的日志文件,将其标记为特定值,以便于组织。例如,应用程序启动时,将创建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!")
}
}
答案 0 :(得分:0)
在我看来,你违反了“关注点分离”,因为你混合了两件事。
首先,创建日志数据(通过日志记录语句和滚动文件appender)。 其次,分析/过滤日志数据(搜索模块信息)。
我的暗示,不要这样做。