Как я могу изменить RollingFileAppender на другой, чем тот, который установлен в файле конфигурации? - PullRequest
1 голос
/ 21 сентября 2011

Я использую log4j в своем приложении и файл конфигурации, который настраивает вывод на консоль и накатывает файл приложения.Вставка конфигурационного файла ниже.Есть ли способ изменить выходной файл fileappender после открытия файла конфигурации в коде?Он открывается нормально для меня, но бывают случаи, когда я захочу использовать выходной файл, отличный от файла по умолчанию в файле конфигурации.Спасибо за любое направление.

log4j.rootLogger=info, stdout, RFA

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=[%p] [%d{MM/dd/yyyy HH:mm:ss}] - %m %n

log4j.appender.RFA=org.apache.log4j.RollingFileAppender
log4j.appender.RFA.File=${user.home}/output.log

log4j.appender.RFA.MaxFileSize=100KB
# Keep backup files
log4j.appender.RFA.MaxBackupIndex=5

log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
log4j.appender.RFA.layout.ConversionPattern=[%p] [%d{MM/dd/yyyy HH:mm:ss}] - %m %n

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Если вы хотите отредактировать файл свойств из своего кода и сделать так, чтобы log4j его обнаружил, вам придется сначала заставить log4j отслеживать файл свойств, вызвав PropertyConfigurator.configureAndWatch("log4j.properties")

Однако я бы предпочел получить программный доступ к аппендерам, используя упомянутый Logger api-подобный кунал.

обновление; код для того, чтобы сделать это программно

Enumeration allAppenders = Logger.getRootLogger().getAllAppenders();
while (allAppenders.hasMoreElements()) {
    Object object = (Object) allAppenders.nextElement();
    if (object instanceof RollingFileAppender) {
        RollingFileAppender appender = (RollingFileAppender) object;
        appender.setFile("/path/to/new/file.log");
        appender.activateOptions();
        break;
    }
}
0 голосов
/ 21 сентября 2011

Я думаю, что вы хотите установить (изменить) файл программно.Посмотрите на RollingFileAppender API .

public void setFile(String fileName,
                    boolean append,
                    boolean bufferedIO,
                    int bufferSize)
             throws IOException

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

0 голосов
/ 21 сентября 2011

определить другого приложения (с другим значением файла).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...