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

如何在Log4j2中将appender添加到记录器

朱锐
2023-03-14

在log4j1.2中,您只需在运行时获取一个记录器并添加一个appender。例如,这对于测试目的很方便。我们曾经创建一个模拟appender并将其添加到记录器中。随后,我们可以做出不同的断言。

log4j2的等价物是什么?

例如,这个例子展示了其他人是如何添加测试附加器的。

log4j2页面显示了一些关于如何添加附加器的示例。但是,它们将追加器添加到整个上下文中。这似乎不同于为一个特定的记录器添加appender。

另一个观察是,如果你使用org.apache.logging.log4j.core.记录仪,而不是org.apache.logging.log4j。记录器,您仍然可以添加appender。然而,大多数人使用org.apache.logging.log4j。记录仪。事实上,LogManager返回org.apache.logging.log4j的实例。记录仪。因此,我不知道如何将这两个类连接起来,以及它们是否应该连接起来。

另一个观察是如果我打电话

      LogManager.getContext().getConfiguration().getLoggers()

我可以获得上下文中所有LoggerConfig对象的列表。随后,我向任何LoggerConfig对象添加appender。然而,问题是,如何获取与org实例相关的LoggerConfig。阿帕奇。登录中。log4j。记录器?

这让我很困惑。

共有1个答案

锺离玮
2023-03-14

org。阿帕奇。登录中。log4j。Logger是位于log4j api模块中的一个接口<代码>组织。阿帕奇。登录中。log4j。果心Logger是一个具体的类(实现上述接口),它位于log4j核心模块中。

LogManager(也在log4japi模块中)返回实现org的内容。阿帕奇。登录中。log4j。Logger接口,如果log4j核心模块位于类路径中,则这将是org的一个实例。阿帕奇。登录中。log4j。果心记录器

因此,您可以将返回的记录器强制转换为org。阿帕奇。登录中。log4j。果心记录器并添加追加器。

每个核心Logger都有一个LoggerConfig(1对1关系)。您可以找到对应于所需Logger的LoggerConfig,因为它们具有相同的名称。

 类似资料:
  • 我有下面的Log4J2配置XML: 但是,每当log4j2 appender写入文件时,它在写入指定的文件路径时不会使用正确的字符串。 log4j2 appender第一次写入文件时,会写入由指定的正确文件路径。但是,只要将具有另一个Id的员工的信息放入线程上下文中,appender仍然会记录到旧文件路径。 例如,appender第一次记录时,它会写入正确的路径: 但当记录器记录下一个员工Id(使

  • 但我自己创建配置时却找不到方法。例如,我有consoleAppenderBuilder和RootLoggerBuilder: 如何将控制台附加器添加到根记录器中,并为附加器定义日志级别。我问这个是因为我想添加多个附加到根记录器。

  • 我已经浏览了之前关于在运行时添加Log4j2附加器的线程,但没有一个真正适合我的场景。 我们将一个长时间运行的Flink作业打包到一个胖jar中,我们基本上将其提交给一个运行的Flink集群。我们想把错误日志转发给哨兵。很方便,Sentry提供了一个我希望能够使用的Log4j2 appender,但所有让Log4j2工作的尝试都失败了——对此有点疯狂(花了几天时间)。 因为Flink(也使用log

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

  • 在发布这个问题之前,我已经做了我的研究,关于我没有正确使用additivity属性的问题,下面是我的log4j2.xml的一个片段,我试图实现的是,在记录器中定义的每个appender ref应该只附加它所定义级别的日志,但是所有的appender都附加了所有日志消息,而不管日志级别如何,因此,例如,调试记录器仍然得到了我不想要的错误消息。如有任何投入,将不胜感激。

  • 我在Google BigQuery中有一个表,它由几个字段组成,然后是一个可能包含一个或多个对象的重复记录。我想在重复数据中创建一个新表,其中包含一个额外字段,并将原始数据复制到新表中,用GENERATE_UUID()的输出填充新字段,以便每个重复数据行都有一个唯一标识符。 我有一个类似的问题,当目标包含重复字段时,如何从一个BigQuery表复制到另一个?但我不知道如何调整它以适应我当前的用例。