2013-04-04 2 views
0

У меня есть log4j с несколькими регистраторами, которые используются в многопоточном приложении. В одном сценарии я попытаюсь подключиться к удаленной службе. Если соединение не удастся, я повторю попытку повторно.Изменить порог Log4j на время вызова

Я бы хотел, чтобы только первый раз log4j использовал свою первоначальную конфигурацию. Но для всех последующих попыток я хочу использовать менее сложную конфигурацию. Это не должно изменять конфигурацию ведения журнала других потоков, которые могут работать на одних и тех же объектах. Обратите внимание, что я не могу заранее знать, какие регистраторы используются внутри вызова для подключения к удаленному сервису.

Итак, существует ли способ изменить ведение журнала в глобальном масштабе в течение одного вызова без изменения поведения других параллельных потоков?

ответ

0

Посмотрите на эту часть API:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html

Вы можете вызвать метод setLevel (LEV Level) и сделать некоторые изменения. Тем не менее, я не уверен на 100%, что вы не будете влиять на другие потоки, так как обычно Logger основан на классе.

Я бы подумал, что вам нужно будет получить объект Logger для каждого сеанса пользователя, но я не уверен на 100%, если это может вызвать проблемы с кучей.

Возможно управление выходным кодом вашего кода (только отправьте некоторые сообщения в журнал, если это первая попытка, например).

С уважением

+0

Спасибо, но setLevel действительно повлияет на другие темы. В противном случае у меня нет доступа к коду, который регистрирует сообщения. Я могу действовать только на конфигурацию log4j. – PeeWee2201

+0

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

Смежные вопросы