Sentry.io + Tomcat + JUL: все логи отправляются на охрану

Я использую Tomcat (7.0.70) + сторож (оба sentry и sentry-spring) + JUL со следующим файлом logging.properties в WEB-INF/classes:

handlers = java.util.logging.FileHandler,java.util.logging.ConsoleHandler,io.sentry.jul.SentryHandler

# Default global logging level.
# Loggers and Handlers may override this level
.level = INFO

#Format
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$-8s --- %2$-100s : %5$s%6$s%n

# Handlers
# -----------------------------------------

# --- ConsoleHandler ---
# Override of global logging level
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# --- FileHandler ---
java.util.logging.FileHandler.level = FINE
java.util.logging.FileHandler.pattern = ${catalina.base}/logs/application.%g.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

io.sentry.jul.SentryHandler.level = SEVERE

Моя проблема в том, что на стражу отправляются все логи, а не только SEVERE. Я также заметил, что если я изменил глобальный .level, это повлияло на то, какие журналы были отправлены на стражу (то есть, если я установил его на WARNING, только предупреждения регистрировались и отправлялись на стражу).

Вы хоть представляете, что я делаю не так?

Спасибо!


person Sébastien Tromp    schedule 19.09.2017    source источник


Ответы (1)


Вы хоть представляете, что я делаю не так?

Если я смотрю на правый исходный код, он не пытается прочитать настройки из LogManager. Вы можете расширить SentryHandler, чтобы подкласс считывался из LogManager и устанавливал уровень. Или вам нужно создать код, чтобы найти SentryHandler и установить уровень.

Если возможно, попробуйте установить некоторую конфигурацию в $CATALINA_BASE/conf вместо WEB-INF/classes.

Если вы посмотрите на исходный код, уровни регистратора устанавливаются только один раз в addLogger методе. WEB-INF/classes будет загружен в readConfiguration(ClassLoader). Если загрузка какого-либо класса инициирует создание регистратора, это могло произойти до readConfiguration(ClassLoader). В этом случае уровень регистратора никогда не изменяется WEB-INF/classes logging.properties.

У вас должна быть возможность объявить некоторые уровни регистратора в $CATALINA_BASE/conf и установку обработчика в WEB-INF/classes.

Попробуйте распечатать дерево регистратора из загрузчика классов приложения. Это может быть так же просто, как просто включить сервлет в приложение для печати дерева регистратора. Возможно, что-то сбрасывает вашу конфигурацию или уровень не устанавливается на обработчике.

person jmehrens    schedule 19.09.2017
comment
Интересно. Я провел несколько тестов и добавил объявление io.sentry.jul.SentryHandler.level = SEVERE в logging.properties в $CATALINA_BASE/conf, но безрезультатно (без изменений). Определить обработчик там немного сложно, поскольку Tomcat не имеет sentry jar-файлов в его пути к классам. Я попробую добавить их, хотя буду извлекать много зависимостей - person Sébastien Tromp; 19.09.2017
comment
Добавление всех зависимостей вызывает ошибку запуска java.lang.ClassNotFoundException: javax.servlet.ServletContainerInitializer, возможно, из-за конфликта с некоторыми встроенными библиотеками? - person Sébastien Tromp; 19.09.2017
comment
Я пробовал большинство различных комбинаций - объявляя все, кроме обработчика в base, а остальные в web-inf, но безрезультатно. - person Sébastien Tromp; 20.09.2017
comment
Похоже на ошибку в реализации обработчика. Смотрите ответ правки. - person jmehrens; 23.09.2017