【问题标题】:Sentry.io + Tomcat + JUL: all logs are sent to sentrySentry.io + Tomcat + JUL:所有日志都发送到哨兵
【发布时间】:2017-09-19 07:01:58
【问题描述】:

我正在使用 Tomcat (7.0.70) + sentry(sentrysentry-spring)+ JUL,并在 WEB-INF/classes 中使用以下 logging.properties 文件:

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,则只会记录警告并将其发送到哨兵)。

你知道我做错了什么吗?

谢谢!

【问题讨论】:

    标签: tomcat java.util.logging sentry


    【解决方案1】:

    你知道我做错了什么吗?

    如果我正在查看正确的 source code,它不会尝试从 LogManager 读取设置。您可以扩展 SentryHandler 并让子类从 LogManager 中读取并设置级别。或者您需要创建代码来找到 SentryHandler 并设置级别。

    如果可能,请尝试在$CATALINA_BASE/conf 中设置一些配置,而不是WEB-INF/classes

    如果您查看source code,记录器级别仅在addLogger 方法中设置一次。 WEB-INF/classes 将被加载到 readConfiguration(ClassLoader)。如果任何类加载触发了记录器的创建,它可能发生在readConfiguration(ClassLoader) 之前。在这种情况下,WEB-INF/classeslogging.properties 永远不会更改记录器级别。

    您应该能够在$CATALINA_BASE/conf 中声明一些记录器级别,并在WEB-INF/classes 中声明处理程序安装。

    Try printing the logger tree 来自应用程序类加载器。这可以像在应用程序中包含一个 servlet 来打印记录器树一样简单。可能有些东西正在重置您的配置,或者处理程序上没有设置级别。

    【讨论】:

    • 有趣。我做了一些测试并将io.sentry.jul.SentryHandler.level = SEVERE 声明添加到logging.properties 中的$CATALINA_BASE/conf,但无济于事(没有变化)。定义处理程序有点棘手,因为 Tomcat 在其类路径中没有 sentry jar。我会尝试添加它们,虽然我会拉很多依赖项
    • 添加所有依赖会导致启动错误java.lang.ClassNotFoundException: javax.servlet.ServletContainerInitializer,可能是因为与某些嵌入式库冲突?
    • 我尝试了大多数不同的组合 - 在 base 中声明除处理程序之外的所有内容,在 web-inf 中声明其余内容,但无济于事。
    • 看起来像处理程序实现中的一个错误。查看答案编辑。
    猜你喜欢
    • 2019-04-16
    • 2020-12-03
    • 1970-01-01
    • 2021-05-07
    • 2021-06-27
    • 2021-11-14
    • 2019-06-14
    • 2020-08-05
    • 2015-10-04
    相关资源
    最近更新 更多