重命名代码中的日志文件后,防止log4net创建新的日志文件 [英] Prevent log4net from creating a new log file after renaming log file in code

查看:138
本文介绍了重命名代码中的日志文件后,防止log4net创建新的日志文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正试图重命名我的日志文件,以将其标记为特定值,以便于组织使用.例如,当应用程序启动时,将创建log_Start.txt.用户访问应用程序中的某个模块后,日志文件应重命名为log_Start_ModuleName.txt.

I'm trying to rename my log files to tag it to a specific value for easier organizational purposes. For example, when application starts, log_Start.txt is created. After user access a certain module in the application, the log file should be renamed as log_Start_ModuleName.txt.

然而,不是重命名,log4net的将创建一个名为log_Start_ModuleName.txt这给我留下了2个文件的新文件.另外,log_Start.txt中的所有先前日志都不会保留到log_Start_ModuleName.txt中.

However, instead of renaming, log4net would create a new file called log_Start_ModuleName.txt which leaves me with 2 files. Also, all previous logs in log_Start.txt are not carried over into log_Start_ModuleName.txt.

我尝试了解决方案,其他文件,但它们似乎都最终创建了一个新的日志文件,而不是重命名.

I've tried a solution and others but they all seem to end up creating a new log file instead of renaming it.

这是我在App.config中的代码:

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 in 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 log stuffs:

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!")
     }
}

推荐答案

我认为您违反了关注点分离",因为您将两件事混在一起了.

In my opinion, you violate "separation of concerns" because you mix two things.

首先,创建日志数据(通过日志记录语句和滚动文件附加程序). 其次,分析/过滤日志数据(搜索模块信息).

First, the creation of log data (via logging statements and a rolling file appender). Second, analysing / filtering log data (searching for module information).

我的提示,请不要这样.

My hint, don't do it this way.

这篇关于重命名代码中的日志文件后,防止log4net创建新的日志文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆