Нужен CallBack всякий раз, когда поток, созданный DOMConfigurator.configureAndWatch, перезагружает log4j.xml - PullRequest
2 голосов
/ 09 января 2012

Java-код: DOMConfigurator.configureAndWatch (log4jConfigFile.getAbsolutePath (), 100000L);

Мне нужно добавлять некоторые приложения автоматически, когда поток, созданный методом configureAndWatch, перезагружает файл log4j.xml.

На самом деле я устанавливаю некоторые приложения автоматически, но они сбрасываются, когда Thread перезагружает файл log4j.xml, поэтому мне нужно снова добавлять приложения автоматически. Для этого мне нужен обратный вызов, когда поток перезагружает файл log4j.xml

Любая идея ?? Как мне это сделать ....

1 Ответ

0 голосов
/ 23 января 2012

К сожалению, Log4j не предоставляет способ регистрации обратного вызова при загрузке конфигурации.Он просто создает «сторожевой» поток, чтобы отслеживать файл и перезагружать конфигурацию при изменениях файла.

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

Вместо:

DOMConfigurator.configureAndWatch(log4jConfigFile.getAbsolutePath(), 100000L);

вы делаете это:

String configFilename = log4jConfigFile.getAbsolutePath();
DOMConfigurator.configure(configFilename);

// set your appenders programmatically here
// ...

MyXMLWatchdog watchDogThread = new MyXMLWatchdog(configFilename);
watchDogThread.setDelay(100000L);
watchDogThread.start();

Вы настроили Log4j, добавили дополнения и запустили поток мониторинга.В потоке вы перезагружаете конфигурацию при изменении файла:

import org.apache.log4j.LogManager;
import org.apache.log4j.helpers.FileWatchdog;
import org.apache.log4j.xml.DOMConfigurator;

public class MyXMLWatchdog extends FileWatchdog {
    public MyXMLWatchdog(String filename) {
        super(filename);
    }

    public void doOnChange() {
        new DOMConfigurator().doConfigure(this.filename, LogManager.getLoggerRepository());
        // set your appenders programmatically here
        // ...
    }
}

Посмотрите исходный код этих классов для получения дополнительной информации: DOMConfigurator (прокрутите вниз) и FileWatchdog .

Хотя я предлагаю просто настроить все в файле log4j.xml и не прибегать к обходным путям.

PS Вы не упоминаете, какой тип Java-приложения у вас есть, нопомните, что configureAndWatch поставляется с предупреждением в приложениях Java EE , поскольку поток не останавливается при завершении работы приложения;останавливается только при отключении JVM.

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