2014-10-28 2 views
2

фона:Как программировать имя файла для RollingFileAppender в log4j?

Мое приложение позволяет два режима работы, которые могут быть выбраны из GUI.
Если он работает как сервер, я хочу направить журналы в файл server.log.
Если он работает как клиент, я хочу направить журналы в файл client.log.

Вопрос:

Как programmingly задавать различные имена для разных режимов для RollingFileAppender в log4j?

Добавлено (10-29-2014): Текущий ответ на @Manish Махешвари не работает для меня. Он вызывает предупреждение log4j:WARN File option not set for appender [file] и не записывает журналы в файл.


Моя попытка:

Я определяю RoleSpecificRollingFileAppender класс, который расширяет RollingFileAppender и переопределяет метод setFile().

public class RoleSpecificRollingFileAppender extends RollingFileAppender { 
    @Override 
    public void setFile(String fileName) { 
     super.setFile(fileName); 
    } 
} 

Мой RollingFileAppender выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> 

<log4j:configuration> 
    # Root logger option 
    log4j.rootLogger=INFO, file 

    # Direct log messages to a log file 
    log4j.appender.file=[[What to do here? org.apache.log4j.RollingFileAppender]] 
    log4j.appender.file.File = [[I don't know how to do here.]] 
    log4j.appender.file.MaxFileSize=50MB 
    log4j.appender.file.MaxBackupIndex=10 
    log4j.appender.file.layout=org.apache.log4j.PatternLayout 
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm} %-5p %c{1}:%L - %m%n 
</log4j:configuration> 

Однако я не знаю, что делать в Java коде и файл log4j.properties.

ответ

0

Используйте полное имя класса для RoleSpecificRollingFileAppender в log4j.appender.file. Попробуйте удалить строку File из config.

Используйте это в загрузчике:

RollingFileAppender app = new RoleSpecificRollingFileAppender(); 
app.setFile(myfile); 
BasicConfigurator.configure(app); 
+0

Я редактировал/обновил ответ. –

+0

Для квалифицированного имени класса контекстное меню Eclipse «имя для копирования» дает мне «/ PHAULR-master/util/log4j/RoleSpecificRollingFileAppender.java'. '/ PHAULR-master' - это проект. Затем я использовал 'util.log4j.RoleSpecificRollingFileAppender' в' log4j.appender.file' и получил ошибку 'log4j: ERROR Нет потока вывода или файла, установленного для приложения с именем [null]'. – hengxin

+0

Полностью квалифицированное имя будет означать имя класса вместе с именем пакета, которое вы бы указали при написании класса. По вашему сообщению об ошибке кажется, что ваш RoleSpecificRollingFileAppender не найден. Исправьте имя класса FQ. –

Смежные вопросы