【问题标题】:Catch log4j2 LogEvents from a custom Listener从自定义侦听器中捕获 log4j2 LogEvents
【发布时间】:2016-11-07 21:31:54
【问题描述】:

有人知道是否可以在 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...");
    }
  }

谢谢!

【问题讨论】:

  • redirect log4j appender to Swing component 插入 Google 搜索,然后选择。
  • @PM77-1 非常感谢!!! :)

标签: java logging configuration log4j2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多