Записать Log4J в jTextArea

Я неопытный разработчик Java, пишущий приложение для резервного копирования.

Мое приложение открывает графический интерфейс (StepTwoBackup, написанный с использованием шаблона NetBeans), который собирает некоторую информацию от пользователя, затем, когда я нажимаю кнопку «Далее», графический интерфейс передает эту информацию объекту (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.

Что я делаю неправильно? Может ли кто-нибудь помочь мне решить это? Спасибо за всю помощь, которую вы можете мне оказать.


person MrBreaker_1972    schedule 22.12.2014    source источник


Ответы (1)


Вам нужно убедиться, что экземпляр JTextArea не null. Вы можете попробовать добавить приложение программно (например, в конструкторе StepThreeBackup после создания компонентов):

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

Не забудьте удалить запись в файле log4j.xml.

person Paul Vargas    schedule 26.12.2014
comment
СПАСИБОУУУ!!!!! Я искал несколько дней, и в конце концов я был почти готов сдаться и импортировать текст прямо из лог-файла, когда вы спасли мне жизнь!!! Это сработало отлично, я только изменил конструктор класса StatusMesageAppender, включая ссылку на JTextArea, в котором будет храниться сообщение, и все заработало нормально! Спасибо! - person MrBreaker_1972; 27.12.2014
comment
Пожалуйста. Не забывайте, что если ответ удовлетворительно решает ваш вопрос, вы можете принять его. ;-) - person Paul Vargas; 27.12.2014