当前位置: 首页 > 知识库问答 >
问题:

log4j2扩展记录器类

巫马翰翮
2023-03-14

我试图从Log4j 1.7迁移到Log4j2.4在1.7中,我通过扩展org.apache.log4j创建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);
}

但是在log4j2中。x、 我无法扩展类组织。阿帕奇。登录中。log4j。记录器;实现这一目标的最佳方式是什么?

共有2个答案

能可人
2023-03-14

正如Ralph所指出的,Log4j2有一套非常丰富的功能,如果你查看留档,你经常会发现你可以使用内置的布局、查找、过滤器和其他功能来实现你的目标。

编写自定义查找只需要几行代码,并为您提供了一个强大的日志子系统钩子,您可以将其用于多种目的。

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

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

谢财
2023-03-14

我能理解为什么你可能想用log4j1做这件事。x、 但是我不明白你为什么要用log4j2做这个。最好的地方是在布局中,但大多数已经这样做了。

 类似资料:
  • Jooq生成器是否支持扩展提供给生成器的自定义类? 我想生成扩展自定义提供类的记录,该类将扩展TableRecordImpl。 我想进入继承链,其中UpdateableRecordImpl将扩展MyRecord,MyRecord将扩展TableRecordImpl?

  • 由于Log4J2的类是,所以我不能扩展它来为我的CSV创建头。 我参考了文档,它没有提供关于如何扩展现有布局的信息。http://logging.apache.org/log4j/2.x/manual/extending.html#布局 以前扩展PatternLayout的方法不起作用。 我的目标是给日志文件添加头&头应该通过下面的日志的配置文件来配置,

  • 由此我从NetBeans得到以下错误消息: 所有异常消息都写入控制台,包括用户日志的消息。所以我知道两个伐木工都在工作。记录器附加器写入文件OK。userLog记录器不会创建任何文件,它使用几乎相同的附加器。 看来我还没有正确地命名一些东西来允许log4j2找到记录器。我试过各种命名的组合来弄对它,但我搞不清问题出在哪里。 我必须在每个类的记录器初始化中包含类名吗? 编辑:我需要包含包名。我花了一

  • 我使用的是Camel3.5和Spring Boot2.3.4应用程序。我试图在log4j2.xml文件中使用log4j2和配置日志级别和附加符。它从处理器工作,但不直接在RouteDefinition中工作。 processor类: 下面是控制台输出。只打印错误日志级别。我必须调用方法.log(logginglevel.debug,LOGGER)才能得到我想要的。 编辑 感谢Luca Burgaz

  • 我最近升级了我的应用程序以使用log4j2。我正在尝试利用它的异步记录器特性。然而,看起来它并没有创建一个。根据Log4j异步配置,它说, 要使所有记录器都是异步的,请将中断器jar添加到类路径中,并将系统属性Log4jContextSelector设置为org.apache.logging.log4j.core.async.AsyncloggerContextSelector。我还设置了log4

  • 我有一个maven项目,它使用log4j2进行日志记录。我想覆盖RootLogger的模式。 这是我的log4j2。属性文件: 这是我的pom。log4j的xml文件: 我这样叫我的记录仪: 我的配置有两个问题。第一个是根记录器不使用我的ConsolePender(警告等以默认格式显示),在记录错误时,我只得到第一行,而不是整个堆栈跟踪)。