java - log4j 重定向到 swing 中的桌面应用程序

标签 java swing logging log4j appender

我在 Swing 中有一个 GUI 应用程序,它是在 NetBeans 中实现的。对于用户输入提供的各种功能,使用了一个 jar,它使用 log4j 进行日志记录。一切正常,但我必须将信息从 log4j 重定向到我的 GUI 中的文本区域。我发现要从 log4j 重定向到 swing 文本区域,必须扩展 AppenderSkeleton。我的问题是我不能修改 gui(例如,为了有一个扩展 AppenderSkeleton 的 JTextArea)所以我必须有这样一个附加到我的 JTextarea 的类。现在我的应用程序在 log4j 之前初始化。我的问题是我找不到一种方法来设置 AppenderSkeleton 自定义类的属性,即对我的 gui 的 jtextarea 的引用,这样当 log4j 初始化 appender 时,它将传递对应用程序文本区域的引用。 我在 log4J 配置文件中试过类似的东西: log4j.appender.myAppender.theTextArea=path.to.myFrameclass.theTextArea 希望 log4j 会调用我的 appender 中的 setter 和我的框架中的 getter 来设置文本区域,但它不起作用。 如何使 appender 由 log4j 初始化,将信息重定向到我的应用程序? 或者我的应用程序有没有办法初始化自定义附加程序并通知 log4j 使用它进行日志记录? 谢谢!

最佳答案

最简单的选择是在您的 GUI 初始化后以编程方式添加您的附加程序。像这样:

Logger.getRootLogger().addAppender(yourTextAreaAppender);

编辑:要仅记录 INFO 级别,请执行以下操作:

yourTextAreaAppender.addFilter(new Filter() {
    @Override
    public int decide(LoggingEvent event) {
        if (event.getLevel().equals(Level.INFO)) {
            return ACCEPT;
        } else {
            return DENY;
        }
    }
});

关于java - log4j 重定向到 swing 中的桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687384/

相关文章:

java - Androidx的PreferenceScreen使用方法

java - 将 JTable 限制为 100 行

c++ - 在 C++ 中记录命令行

java - Android ListView 像 Twitter 列表一样滑动操作

java - 具有 Spring 基于角色的安全性的 GWT RPC

java - 如何在validation-text.properties 文件中使用通配符?

java - 使用 MouseListener 和 MouseMotionListener 绘制矩形

Java Swing - 在与 JFrame 不同的类中使用paintIcon

asp.net - 如何在成员(member) asp.net 2008 中获取当前用户名

java - 在 log4j 中替代 'ThreadContext'