Как использовать свойства в проекте Spring для настройки log4j.xml - PullRequest
6 голосов
/ 25 мая 2011

У меня есть несколько файлов свойств в моем проекте Spring.Контекст Spring загружает эти свойства и обрабатывает переопределение свойств удобным способом.Есть ли способ взять свойства, доступные для моих XML-файлов конфигурации Spring (например, ${myprop}), и использовать их аналогичным образом в моем log4j.xml файле?Я знаю, что могу передать системные свойства в log4j, используя -Dprop=value при запуске, но я бы предпочел иметь всю конфигурацию в файлах свойств в моем проекте.Возможно ли это?

Мое приложение работает в Tomcat.

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Попробуйте использовать этот класс после объединения нескольких файлов свойств в один.

public class DOMConfiguratorWithProperties extends DOMConfigurator {

    private Properties propertiesField = null;

    public synchronized Properties getProperties() {
        return propertiesField;
    }

    public synchronized void setProperties(final Properties properties) {
        propertiesField = properties;
    }

    @Override
    protected String subst(final String value) {
        return super.subst(value, getProperties());
    }

    public static void configure(final String filename) {
        new DOMConfiguratorWithProperties().doConfigure(
                filename,
                LogManager.getLoggerRepository());
    }

    public static void configure(
            final String filename,
            final Properties properties) {
        DOMConfiguratorWithProperties configurator = new DOMConfiguratorWithProperties();
        configurator.setProperties(properties);
        configurator.doConfigure(
                filename,
                LogManager.getLoggerRepository());
    }
}
0 голосов
/ 25 мая 2011

Я думаю, что единственный способ взаимодействия с Log4J - через вложенный диагностический контекст .

Так что, если вы очень отчаялись, вы можете написать аспект Spring AOP, который устанавливает диагностикуконтекст для ваших журналов Spring Bean (и вы можете использовать свойства там).Однако для этого потребуется, чтобы журнал был доступен для Spring Bean, поэтому вам необходимо добавить метод getLog() в интерфейсы сервисов (это становится намного проще, если вы используете статическую компиляцию AspectJ и описано в AspectJв действии ).

Но если не использовать AOP, я не могу придумать разумного способа взаимодействия Spring и Log4J.

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