log4j: список свойств для каждого Appender? - PullRequest
2 голосов
/ 24 ноября 2010

Задача:

Я пытаюсь настроить Appender для вывода в JTextArea. Я полагаю, что WriterAppender способен писать в OutputStream. Я уже создал подкласс OutputStream для создания класса JTextAreaOutputStream, который в настоящее время заполняется путем перехвата вывода из System.out и System.err.

Файл конфигурации:

    # File appender for the GUI screen
    log4j.appender.gui = org.apache.log4j.WriterAppender
    log4j.appender.gui.Target=project.gui.GUIView.logWindow   //logWindow is the name of my JTextArea

    # Root logger option
    log4j.rootLogger=INFO, gui

Ошибка:

log4j:WARN No such property [target] in org.apache.log4j.WriterAppender.

Вопрос:

Кто-нибудь знает, где я могу определить действительный набор свойств для каждого Appender?

Ответы [ 3 ]

2 голосов
/ 17 сентября 2012

Вот как я настроил WriterAppender:

В log4j.properties :

log4j.rootLogger=INFO, ConsoleAppenderInstance,FileAppenderInstance, WriterAppenderInstance
...
log4j.appender.WriterAppenderInstance=org.apache.log4j.WriterAppender
log4j.appender.WriterAppenderInstance.layout=org.apache.log4j.PatternLayout
log4j.appender.WriterAppenderInstance.layout.ConversionPattern=%m%n

В коде Java:

StringWriter writer = new StringWriter();
Logger root = Logger.getRootLogger();
WriterAppender app = (WriterAppender)root.getAppender("WriterAppenderInstance");
app.setWriter(writer);
...
writer.toString()

И какдля доступных свойств, я думаю, все, начиная с set здесь: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/WriterAppender.html (и в подклассах)

2 голосов
/ 24 ноября 2010

Почему вы думаете, что WriterAppender имеет такое свойство? Насколько я вижу из JavaDocs , у него нет такого свойства. Может быть, вы путаете это с ConsoleAppender ?

Вы можете получить список свойств для каждого приложения , если откроете соответствующий JavaDoc / исходный код и посмотрите все методы установки в стиле JavaBean. Это означает, что если WriterAppender будет иметь свойство target, то для него потребуется setTarget(...) метод установки.

В любом случае, я рекомендую вам подкласс WriterAppender и создать свой собственный JTextAreaAppender, который передаст ваш пользовательский OutputStream суперклассу. См. ConsoleAppender и FileAppender для примеров таких подклассов.

EDIT : кстати, поскольку вам, скорее всего, нужно передать ссылку на JTextArea на ваш JTextAreaAppender, я бы порекомендовал вам настроить log4j программно. Или, по крайней мере, добавьте свой пользовательский аппендер программно, после того как у вас есть ссылка на JTextArea

Или, что еще лучше, вы можете настроить его с помощью файла свойств, но оставить исходную ссылку JTextArea равной нулю - после запуска приложения и получения ссылки jTextArea вы можете программно просматривать все приложения log4j и передайте ссылку на ваш заказ JTextAreaAppender.

0 голосов
/ 24 апреля 2012

Я знаю, что это довольно старый процесс, но я просто хотел продолжить рассмотрение этого вопроса, поскольку я провел все утро, пытаясь найти ту же информацию.

Из того, что я могу сказать, log4j WriterAppender не может быть настроенво внешнем файле конфигурации, поскольку у него нет настраиваемых параметров.Класс предназначен для записи в Writer или OutputStream, и просто невозможно указать этот объект в файле конфигурации на основе строк.

Если это неверно, пожалуйста, исправьте меня и укажитеместо, где можно найти правильную информацию.Я отчасти удивлен, что этот ответ не так легко и очевидно найти таким, какой он есть.

...