有人知道是否可以在log4j上创建一个监听器来捕获来自命名方法/类的每个日志?最终目的是将检索到的日志添加到JPanel中。
<?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...");
}
}
谢谢!
答案 0 :(得分:1)
我这样做的方法是编写一个自定义的log4j2 appender。这实际上很容易用Log4j 2.这是一个让你入门的例子:https://stackoverflow.com/a/24220688/1446916
示例打印到控制台,但在您的情况下,您将附加到文本区域。 (实际上,您希望将Runnable提交到SwingUtils.invokeLater(),将文本附加到文本区域.Swing要求所有交互都在AWT事件线程中进行。)
唯一剩下的就是将这两者连接在一起。您可以通过一些静态查找使文本区域可用。如果在接收日志事件时尚未初始化文本区域,您可能需要考虑如何操作。删除事件,或将它们排队并稍后追加它们?