我正在使用 Tomcat (7.0.70) + sentry(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
我的问题是所有日志都被发送到 Sentry ,而不仅仅是 SEVERE
的日志。我还注意到,如果我更改了全局 .level
,它会影响将哪些日志发送到 Sentry (即,如果我将其设置为 WARNING
,则只会记录警告并且发送给 Sentry )。
你知道我做错了什么吗?
谢谢!
最佳答案
Do you have any idea what I am doing wrong?
如果我看右边source code , 它不会尝试从 LogManager 中读取设置.您可以扩展 SentryHandler 并让子类从 LogManager 读取并设置级别。或者您需要创建代码来找到 SentryHandler 并设置级别。
如果可能,请尝试在 $CATALINA_BASE/conf
而不是 WEB-INF/classes
中设置一些配置。
如果您查看 source code ,记录器级别仅在 addLogger
方法中设置一次。 WEB-INF/classes
将在 readConfiguration(ClassLoader)
中加载。如果任何类加载触发记录器创建,它可能发生在 readConfiguration(ClassLoader)
之前。在这种情况下,WEB-INF/classes
logging.properties 永远不会更改记录器级别。
您应该能够在 $CATALINA_BASE/conf
中声明一些记录器级别,并在 WEB-INF/classes
中声明处理程序安装。
Try printing the logger tree来自应用程序类加载器。这可以很简单,只需在应用程序中包含一个 servlet 即可打印记录器树。也许某些东西正在重置您的配置,或者未在处理程序上设置级别。
关于tomcat - Sentry.io + Tomcat + JUL : all logs are sent to sentry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46293943/