Конфигурация Log4J для транзакций Spring JTA - PullRequest
0 голосов
/ 09 марта 2010

Мы используем эту конфигурацию Log4J для отображения информации JTA:

<category name="org.springframework.transaction">
    <priority value="DEBUG"/>
</category>

Полученные записи журнала имеют тип:

15:36:08,048 DEBUG [JtaTransactionManager] [ ] Creating new transaction with name [class]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
15:36:09,564 DEBUG [JtaTransactionManager] [ ] Initiating transaction commit

... Теперь мы используем MessageListener Spring для прослушивания очереди MQ. Проблема в том, что это транзакция, и вышеупомянутые записи распечатываются каждые 2 секунды.

То, что мы хотим, - это просто распечатывать эти записи журнала JTA, когда кто-то использует наш REST API для доступа к службам, использующим @Transactional. Мы не хотим, чтобы записи журнала JTA исходили из этой реализации прослушивания MQ "опроса".

Вы можете сделать это?

Ответы [ 2 ]

2 голосов
/ 09 марта 2010

Вы должны установить уровень журнала по умолчанию выше, чем DEBUG в вашей конфигурации, затем попробуйте настроить уровень журнала для org.springframework.transaction вручную в вашем REST API внутри соответствующего вызова. Например,

public void doSomething() {
    Logger txLogger = Logger.getLogger("org.springframework.transaction");
    Level defaultLevel = txLogger.getLevel();
    txLogger.setLevel(Level.DEBUG);
    // do my stuff
    txLogger.setLevel(defaultLevel);
}

Это означает, что во время вызова вашего API - но только тогда - вызовы, инициированные слушателем MQ, также будут регистрироваться, но AFAIK нет способа настроить разные уровни журнала для того же класса в зависимости от того, где он вызывается от: - (

Обновление: Другой возможностью будет создание пользовательского TransactionManager, который будет просто оберткой для той, что предоставляется Spring. Он будет переадресовывать звонки в Spring и записывать собственные журналы. Вы бы использовали это в своем API, но версию Spring в слушателе MQ. Тогда у вас будет два разных класса, чтобы вы могли установить разные уровни журнала. Я вполне уверен, что это возможно, однако это может быть более сложным для настройки и обслуживания, чем это стоит ...

1 голос
/ 10 марта 2010

Полагаю, вы используете DefaultMessageListenerContainer, верно? Это активно опрашивает очередь JMS, создавая постоянный поток транзакций.

Есть одна вещь, которую вы могли бы попробовать, и я не решаюсь это предложить, но вы можете вместо этого использовать SimpleMessageListenerContainer. Это не опрос JMS, он полагается на JMS, чтобы доставлять ему сообщения. Это проще (отсюда и название), но менее надежно в некоторых настройках JMS. Поскольку он более пассивен, он будет генерировать меньшую нагрузку транзакции и, следовательно, меньше шума журнала.

Я не решаюсь предложить это, потому что изменение вашей конструкции, чтобы уменьшить шум журнала, вероятно, не очень хорошая идея.

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