【问题标题】:Write Log4J to jTextArea将 Log4J 写入 jTextArea
【发布时间】:2014-12-22 08:07:19
【问题描述】:

我是一个没有经验的 Java 开发人员,正在编写一个处理备份的应用程序。

我的应用程序打开一个 gui(使用 NetBeans 模板编写的 StepTwoBackup),它从用户那里收集一些信息,然后当我按下“下一步”按钮时,gui 将这些信息传递给一个对象(BackupRestore,它正在记录所有使用 Log4J 进行操作),然后打开另一个窗口 (StepThreeBackup) 并将对象传递给它。

在这个新窗口(StepThreeBackup)中,我自动在传递的对象(BackupRestore.execute())上启动一个执行备份的方法。 在最后一个窗口 (StepThreeBackup) 中,我创建了一个 JTextArea,我想在其中显示 Log4J 的输出(当前写入日志文件并输出到控制台)。

有没有办法做到这一点?我读过我应该使用附加程序,但无法弄清楚如何正确执行此操作。

目前我在我的工作 Log4J 属性文件中创建了以下条目:

<appender name="guiAppender" class="BackupAppGui.StatusMessageAppender">
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
</layout>
</appender>

然后是我的包中的以下类(在另一篇文章之后):

打包BackupAppGui;

/**
 *
 * @author MSTPA
 */
import javax.swing.JTextArea;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;


public class StatusMessageAppender extends AppenderSkeleton {
    private final JTextArea jTextA;

    public StatusMessageAppender() {
        jTextA = StepThreeBackup.getJTextA();
    }
    protected void append(LoggingEvent event) 
    {
        if(event.getLevel().equals(Level.INFO)){
        jTextA.append(event.getMessage().toString());
        }
    }
    public void close() 
    {
    }
    public boolean requiresLayout() 
    {
        return false;
    }
}

但是没有任何东西写入 jTextArea。

我做错了什么?有人可以帮我解决这个问题吗?感谢您为我提供的所有帮助。

【问题讨论】:

    标签: log4j jtextarea appender


    【解决方案1】:

    您需要确保 JTextArea 的实例不是null。 Yoy 可以尝试以编程方式添加 appender(例如在创建组件后在 StepThreeBackup 的构造函数中):

    StatusMessageAppender appender = new StatusMessageAppender();
    LogManager.getRootLogger().addAppender(appender);
    

    不要忘记删除log4j.xml 文件中的条目。

    【讨论】:

    • 谢谢你!!!!看了几天,最后差点放弃,直接从日志文件中导入文本,你救了我的命!!!它工作得很好,我只更改了 StatusMesageAppender 类的构造函数,包括对将保存消息的 JTextArea 的引用,一切正常!谢谢!
    • 不客气。不要忘记,如果答案令人满意地解决了您的问题,您可以accept it。 ;-)
    猜你喜欢
    • 2013-04-09
    • 2012-05-18
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多