log4j2扩展了Logger类

时间:2016-01-14 03:50:57

标签: java logging log4j log4j2

我正在尝试从Log4j 1.7迁移到Log4j2.4 在1.7中,我通过扩展org.apache.log4j.Logger并使用扩展的debug / error / fatal方法创建AppLogger类 例如,

public void error(Object message) {
   Object error = message;

 if (message instanceof Exception) {
    Exception e = (Exception) message;
    StringWriter sw = new StringWriter();
        e.printStackTrace(new PrintWriter(sw));
        error = sw.toString();
    }

 super.error(error);
}

但是在Log4j 2.x中,我无法扩展类org.apache.logging.log4j.Logger; 实现这一目标的最佳途径是什么?

2 个答案:

答案 0 :(得分:1)

我可以理解为什么你可能想用Log4j 1.x做这个,但是我无法弄清楚你为什么要用log4j 2做这个。最好的地方是在布局中,但大多数已经这样做。

答案 1 :(得分:1)

正如Ralph指出的那样,Log4j2具有非常丰富的功能,如果您查看文档,您经常会发现使用内置layoutslookups可以实现目标,filters和其他功能。

Writing a custom lookup只需几行代码就可以为日志子系统提供强大的钩子,您可以将其用于多种用途。

如果您确实想要出于任何原因扩展Logger,请注意某些布局需要Log4j遍历堆栈跟踪以报告来自记录器的代码中的哪个类和行。这个机制有点复杂,一般来说我建议你创建一个Logger包装器而不是扩展它。 (更喜欢委托给子类化。)

Log4j有一个工具可以让您轻松实现:Custom Log Levels页面中记录的自定义记录器生成器工具。试试这个,看看它是否能满足你的需求。