奇怪的 log4j 声明

Strange log4j declaration

我有一个旧项目的问题:日志文件没有附加到 Eclipse 的控制台视图中。而不是在 log4j.xml 或 log4j.properties 中声明 log4j 使用的属性,而是在 java:

中定义记录器
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;


public class GCLogger {
    private static GCLogger _self;
    private Logger logger;

    private static final String NAME_FILE = "fichierLog.log";

    public static GCLogger getInstance() {
        if (_self == null || _self.logger == null) {
            GCLogger logger = new GCLogger();
            logger.initLogger();
            _self = logger;
        }
        return _self;
    }

    public void error(String msg, Exception e) {
        if (logger != null) {
            logger.error(msg, e);
        }
    }

    public void debug(String msg) {
        if (logger != null) {
            logger.debug(msg);
        }
    }

    private void initLogger() {
        logger = Logger.getRootLogger();
        FileAppender fa = new FileAppender();
        PatternLayout monLayout = new PatternLayout("%d{DATE} - %5p %c{1} - %m%n");
        logger.removeAllAppenders();

        try {
            File repLogs = new File(GCConstants.GC_REPERTOIRE_LOGS);
            if (!repLogs.exists()) {
                repLogs.mkdir();
            }

            fa = new FileAppender(monLayout, GCConstants.GC_REPERTOIRE_LOGS + File.separator + NAME_FILE, true);
            fa.activateOptions();
            fa.setImmediateFlush(true);

            logger.addAppender(fa);
            logger.setLevel(Level.ALL);

        } catch(Exception e) {
            logger = null;
        }
    }
}

有没有简单的方法在控制台视图中显示 fichierLog.log(使用 eclipse 配置)?

如果不是,最小的改变是什么让它起作用?

最小更改 - 添加控制台附加程序:

ConsoleAppender console = new ConsoleAppender(monLayout); // re-use the layout
logger.addAppender(console);

<意见> 但是,如果您要对代码库进行其他更改,我强烈建议您将其更改为使用外部配置 - 从长期(也可能是短期)来看,这将使您的生活更加轻松。