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