如何将log4j输出消息分配给变量

时间:2018-12-15 21:54:50

标签: java string logging log4j

我想将进入控制台的log4j消息分配给我的变量, 例如:

log.info("some info");
String info = // info message from log

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我不明白为什么,我认为您的消息比简单的字符串还要复杂。 您可以尝试实现自己的自定义java Appender并将其注册到Logger中。 Appender将充当消息的侦听器,您将能够实现一些自定义逻辑。

答案 1 :(得分:1)

Message message = new SimpleMessage("some info");

PatternLayout layout = PatternLayout.createDefaultLayout();
Log4jLogEvent event = Log4jLogEvent.newBuilder()
                                   .setLevel(Level.INFO)
                                   .setMessage(message)
                                   .build();

String formattedMessage = layout.toSerializable(event);

形成记录器要打印的确切字符串的过程非常繁琐。您需要以编程方式描述通常在配置文件中写入的设置。然后,您应该构建一个事件,该事件将为您的设置提供上下文。

为简单起见,我采用默认布局,并使用简单的INFO消息构建了一个事件。但是我很确定应该有一种方法可以从外部来源加载配置。试试:PatternLayout.createPatternParser(Configuration)