Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Log4j


Автор: unia 14.12.2005, 13:58
Как заставить свой Appender перехвативать логи??
На сколько я понимаю нужно прописать что-то в log4j.properties...
Жду ответа

Автор: LSD 14.12.2005, 14:35
Цитата(unia @ 14.12.2005, 13:58)
Как заставить свой Appender перехвативать логи??

Надо добавить его к логгеру, кодом это делается так:
Код
Logger logger = Logger.getLogger("ru.vingrad.sample");
MyAppender myAppender = new MyAppender();
logger.addAppender(myAppender);


Или прописать в конфигурационный файл, что то наподобие:
Код
  <appender name="MyAppender" class="org.apache.log4j.FileAppender">
    <param name="File" value="application.log"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{ISO8601} [%-5p] - %m at %l%n"/>
    </layout>
  </appender>
  <root>
    <priority value="debug"/>
    <appender-ref ref="MyAppender"/>
  </root>

Автор: Guest 14.12.2005, 14:51
У меня следующая ситуация: логер оглашен в тестируемом класе,скажем в Import, а аппендер в класе TestImport, так что кодом добавить аппендер в логгер вроде не вийдет.
А в конфугупационном файле на сколько я понял прописивается обичний файл логер с именем MyAppender.
Немного не то .
метод класа TestImport тестирует метод класа Import в котором ведется логирование. Как мне через аппендер класа TestImport(он их почемуто не перехвативает, может и не должен) просмотреть логи Import'а. Спасибо за бистрый ответ....

Автор: LSD 14.12.2005, 14:59
Цитата(Guest @ 14.12.2005, 14:51)
У меня следующая ситуация: логер оглашен в тестируемом класе,скажем в Import, а аппендер в класе TestImport, так что кодом добавить аппендер в логгер вроде не вийдет.

Почему это? Когда ты пишешь Logger.getLogger("ru.vingrad.sample"), то происходит следующее: если логгера с таким именем нет, то он создается, если есть то возвращается ссылка на существующий экземпляр. Так что пишешь в TestImport - Logger.getLogger("ru.vingrad.sample") с тем же самым именем, что и в Import и получишь ссылку на тот же самый логгер. И добавляешь к нему свой аппендер.

Автор: unia 14.12.2005, 15:31
В коде прописал - работает, спасибо.
а как бы ето организовать в пропертях, мне кажется что так как написано выше будет просто обичный лог писатся в файл или нет?

Автор: LSD 14.12.2005, 15:38
Цитата(unia @ 14.12.2005, 15:31)
а как бы ето организовать в пропертях, мне кажется что так как написано выше будет просто обичный лог писатся в файл или нет?

Да, пример с XML конфигуратором будет использовать стандартный FileAppender. Если хочешь заменяешь имя класса org.apache.log4j.FileAppender на имя своего класса. Прописываешь нужные параметры, если надо добавялешь свой Layout. Только учти, что секция
Код
  <root>    
    <priority value="debug"/>    
    <appender-ref ref="MyAppender"/>    
  </root>

должна быть одна, и если она уже есть, то надо просто в нее добавить свой аппендер.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)