I am trying to rename my log files to mark it for a specific value for simpler organizational purposes. For example, when the application starts, log_Start.txt is created. After user access to a specific module in the application, the log file should be renamed as log_Start_ModuleName.txt.
However, instead of renaming, log4net will create a new file called log_Start_ModuleName.txt, which will leave me 2 files. In addition, all previous logs in the log_Start.txt file are not transferred to the log_Start_ModuleName.txt file.
I tried the solution and others, but they all seem to end up creating a new log file, rather than renaming it.
This is my code in 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>
And this is how I rename the file to code
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; } } }
And this is how I record the material:
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!") } }
source share