我正在尝试从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; 实现这一目标的最佳途径是什么?
答案 0 :(得分:1)
我可以理解为什么你可能想用Log4j 1.x做这个,但是我无法弄清楚你为什么要用log4j 2做这个。最好的地方是在布局中,但大多数已经这样做。
答案 1 :(得分:1)
正如Ralph指出的那样,Log4j2具有非常丰富的功能,如果您查看文档,您经常会发现使用内置layouts,lookups可以实现目标,filters和其他功能。
Writing a custom lookup只需几行代码就可以为日志子系统提供强大的钩子,您可以将其用于多种用途。
如果您确实想要出于任何原因扩展Logger,请注意某些布局需要Log4j遍历堆栈跟踪以报告来自记录器的代码中的哪个类和行。这个机制有点复杂,一般来说我建议你创建一个Logger包装器而不是扩展它。 (更喜欢委托给子类化。)
Log4j有一个工具可以让您轻松实现:Custom Log Levels页面中记录的自定义记录器生成器工具。试试这个,看看它是否能满足你的需求。