将Log4J写入jTextArea

将Log4J写入jTextArea,log4j,jtextarea,appender,Log4j,Jtextarea,Appender,我是一个没有经验的Java开发人员,编写的应用程序正在处理备份 我的应用程序打开一个gui(使用NetBeans模板编写的StepTwoBackup),它从用户那里收集一些信息,然后当我按下“下一步”按钮时,gui将这些信息传递给一个对象(BackupRestore,它使用Log4J记录所有操作),然后打开另一个窗口(StepTwoBackup)并将对象传递给它 在这个新窗口(StepThreeBackup)中,我自动在传递的对象(BackupRestore.execute())上启动一个方法来

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

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

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

有办法做到这一点吗?我读过应该使用appender的文章,但我不知道如何正确地使用appender

目前,我在工作日志4j属性文件中创建了以下条目:

<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>
但是没有任何内容写入jTextArea


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

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


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

谢谢!!!!!我环顾四周好几天,最后我几乎准备放弃,直接从日志文件导入文本,你救了我的命!!!它工作得很好,我只更改了StatusMesageAppender类的构造函数,包括对将保存消息的JTextArea的引用,一切都很好!非常感谢。不客气。不要忘记,如果一个答案令人满意地解决了你的问题,你可以。;-)
/**
 *
 * @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;
    }
}
StatusMessageAppender appender = new StatusMessageAppender();
LogManager.getRootLogger().addAppender(appender);