【问题标题】:Google Cloud Logging Handler Not Found未找到 Google Cloud Logging 处理程序
【发布时间】:2019-09-10 17:32:32
【问题描述】:

当我将记录器指向谷歌云日志处理程序时,我的谷歌应用引擎本地开发服务器返回一个 classdef not found 异常,我该如何解决这个问题?

INFO: Dev App Server is now running
Can't load log handler "com.google.cloud.logging.LoggingHandler"
java.lang.ClassNotFoundException: com.google.cloud.logging.LoggingHandler
java.lang.ClassNotFoundException: com.google.cloud.logging.LoggingHandler
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.util.logging.LogManager$5.run(LogManager.java:965)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.util.logging.LogManager.loadLoggerHandlers(LogManager.java:958)
    at java.util.logging.LogManager.addLogger(LogManager.java:1165)
    at java.util.logging.LogManager.demandLogger(LogManager.java:556)
    at java.util.logging.Logger.demandLogger(Logger.java:455)
    at java.util.logging.Logger.getLogger(Logger.java:502)
    at coffee.weneed.chat.CoffeeChat.<clinit>(CoffeeChat.java:37)
    at coffee.weneed.chat.kik.KikServlet.doGet(KikServlet.java:18)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at ...

我的 logging.properties:

.level = INFO
io.grpc.netty.level=INFO
sun.net.level=INFO

coffee.weneed.chat.CoffeeChat.handlers=com.google.cloud.logging.LoggingHandler,java.util.logging.ConsoleHandler
com.google.cloud.logging.LoggingHandler.log=coffee_chat
com.google.cloud.logging.LoggingHandler.level=INFO

com.google.cloud.logging.LoggingHandler.flushLevel=SEVERE
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s

和我的系统属性:

    <system-properties>
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
  </system-properties>

我已将云登录包含到 Maven 部门中,云 Maven 插件已安装。我只是不太明白为什么它不会加载类。

【问题讨论】:

  • 我最终使用了logback 功能,因为我不知道如何让 JUL 工作。

标签: java eclipse google-app-engine java.util.logging


【解决方案1】:

You have to use code to install a custom handler in GAE。这被描述为feature request for GAE。这也是 JDK 的一个已知问题JDK-6878454: LogManager class loading inconsistent with Java EE best practices

问题在于 LogManager 使用系统类加载器来定位处理程序,但您的代码位于 Web 应用程序类加载器中,该类加载器将成为子类加载器。子类加载器可以在父类中定位类,但反之则不行。这就是你的java.lang.ClassNotFoundException 的原因。

您可以关注this example setting up a custom handler setup in GAE。这使用ServletContextListener 来访问正确的类加载器。

【讨论】:

  • 谢谢,这就像一个魅力!我最终使用this code 来模拟我放在上面的 logging.properties,以防有人想看看如何。
猜你喜欢
  • 1970-01-01
  • 2014-03-10
  • 2019-07-21
  • 2021-08-06
  • 2018-10-03
  • 2016-12-19
  • 2012-09-15
  • 1970-01-01
  • 2012-12-21
相关资源
最近更新 更多