有人知道是否可以在 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/