gpt4 book ai didi

java - 从自定义监听器捕获 log4j2 LogEvents

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:20 26 4
gpt4 key购买 nike

有人知道是否可以在 log4j 上创建一个监听器以从命名方法/类捕获每个日志?最后是将检索到的日志添加到 JPanel 中。

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR" name="config">
<Properties>
<Property name="LOG_DIR">logs</Property>
<Property name="ARCHIVE">logs/archive</Property>
<Property name="PATTERN">%-5level %d [%t] %c:%M(%L): %m%n</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="${PATTERN}"/>
</Console>

<RollingFile name="fileWriter"
fileName="${LOG_DIR}/logs.log"
filePattern="${ARCHIVE}/logs.log.%d{yyyy-MM-dd-hh-mm}.gz">
<PatternLayout pattern="${PATTERN}"/>
<TimeBasedTriggeringPolicy/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="fileWriter"/>
</Root>
</Loggers>
</Configuration>

日志示例

  public class MyClass() {
private final static Logger logger = LogManager.getLogger();

public void method() {
logger.info("Some text...");
logger.info("More text...");
}
}

谢谢!

最佳答案

我这样做的方法是编写自定义 log4j2 appender。这实际上使用 Log4j 2 很容易做到。下面是一个帮助您入门的示例:https://stackoverflow.com/a/24220688/1446916

该示例打印到控制台,但在您的情况下,您将追加到文本区域。 (实际上,您想向 SwingUtils.invokeLater() 提交一个 Runnable,它将文本附加到文本区域。Swing 要求所有交互都发生在 AWT 事件线程中。)

唯一剩下的就是将这两个连接在一起。您可以通过一些静态查找使文本区域可用。当您收到日志事件时,您可能想考虑如果文本区域尚未初始化怎么办。删除事件,或将它们排队并稍后追加?

关于java - 从自定义监听器捕获 log4j2 LogEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38213707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com