【发布时间】:2020-09-01 17:49:57
【问题描述】:
我目前正在测试向 Java 11 的迁移,但我遇到了日志记录组件的问题。在 Java 8 中,一切都正确记录,具有适当的日志级别并将日志聚合到请求中。但是,在迁移到 Java 11 后,情况不再如此。
我浏览了以下指南: https://cloud.google.com/appengine/docs/standard/java11/writing-application-logs https://cloud.google.com/logging/docs/setup/java#the_javautillogging_handler 我对我们的代码进行了必要的更改,现在服务器在初始化时崩溃了。我收到以下错误:
java.lang.AbstractMethodError:接收器类 com.google.api.gax.grpc.InstantiatingGrpcChannelProvider 未定义或继承已解析方法 'abstract com.google.api.gax.rpc.TransportChannelProvider withExecutor(java. util.concurrent.Executor)' 的接口 com.google.api.gax.rpc.TransportChannelProvider。在 com.google.api.gax.rpc.ClientContext.create(ClientContext.java:140) 在 com.google.api.gax.rpc.ClientContext.create(ClientContext.java:123) 在 com.google.cloud.logging .spi.v2.GrpcLoggingRpc.(GrpcLoggingRpc.java:132) 在 com.google.cloud.logging.LoggingOptions$DefaultLoggingRpcFactory.create(LoggingOptions.java:61) 在 com.google.cloud.logging.LoggingOptions$DefaultLoggingRpcFactory.create( LoggingOptions.java:55) 在 com.google.cloud.ServiceOptions.getRpc(ServiceOptions.java:561) 在 com.google.cloud.logging.LoggingOptions.getLoggingRpcV2(LoggingOptions.java:129) 在 com.google.cloud.logging .LoggingImpl.(LoggingImpl.java:109) 在 com.google.cloud.logging.LoggingOptions$DefaultLoggingFactory.create(LoggingOptions.java:46) 在 com.google.cloud.logging.LoggingOptions$DefaultLoggingFactory.create(LoggingOptions.java: 41) 在 com.google.cloud.ServiceOptions.getService(ServiceOptions.java:541) 在 com.google.cloud.logging.LoggingHandler.getLogging(LoggingHandler.java:362) 在 com.google.cloud.logging。 LoggingHandler.(LoggingHandler.java:195) 在 com.google.cloud.logging.LoggingHandler.(LoggingHandler.java:151) 在 com.google.cloud.logging.LoggingHandler.(LoggingHandler.java:120) 在 java.base/ jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl .java:45) 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 java.base/java.lang.Class.newInstance(Class.java:584) 在 java.logging/ java.util.logging.LogManager.createLoggerHandlers(LogManager.java:1000) 在 java.logging/java.util.logging.LogManager$4.run(LogManager.java:970) 在 java.logging/java.util.logging.LogManager $4.run(LogManager.java:966) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.logging/java.util.logging.LogManager.loadLogg erHandlers(LogManager.java:966) 在 java.logging/java.util.logging.LogManager.addLogger(LogManager.java:1199) 在 java.logging/java.util.logging.LogManager.demandLogger(LogManager.java:525)在 java.logging/java.util.logging.LogManager.demandLogger(LogManager.java:515) 在 java.logging/java.util.logging.Logger.demandLogger(Logger.java:654) 在 java.logging/java.util .logging.Logger.getLogger(Logger.java:717) at java.logging/java.util.logging.Logger.getLogger(Logger.java:701) at com.altairix.comm.adf.root.log.DefaultLogger.( DefaultLogger.java:26) 在 com.altairix.comm.adf.root.log.LoggerFactory.(LoggerFactory.java:7) 在 com.altairix.adf.Adf_Server.(Adf_Server.java:234) 在 com.altairix.adf .root.servlet.AdfServlet.(AdfServlet.java:98) 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java :62) 在 java.base/jdk.internal.reflect.DelegatingConstructorAcc essorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 java.base/java.lang.Class.newInstance(Class.java:584)在 org.eclipse.jetty.server.handler.ContextHandler$Context.createInstance(ContextHandler.java:2372) 在 org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:1166) 在 org.eclipse.jetty .servlet.ServletHolder.newInstance(ServletHolder.java:1207) 在 org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:588) 在 org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:472 ) 在 org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:752) 在 org.eclipse.jetty.servlet.ServletHandler 的 org.eclipse.jetty.servlet.ServletHolder.ensureInstance(ServletHolder.java:767)。 doHandle(ServletHandler.java:582) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 在 org.eclipse.jetty.security.SecurityHand ler.handle(SecurityHandler.java:577) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java: 1127) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 在 org.eclipse.jetty.server 的 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) .handler.ContextHandler.doScope(ContextHandler.java:1061) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper .java:97) 在 org.eclipse.jetty 的 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) 的 org.eclipse.jetty.server.Server.handle(Server.java:499)。 server.HttpConnection.onFillable(HttpConnection.java:257) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java :635) 在 org.eclipse .jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.base/java.lang.Thread.run(Thread.java:834)
我们的代码最后一次调用是:com.altairix.comm.adf.root.log.DefaultLogger.(DefaultLogger.java:26),即:
logger = java.util.logging.Logger.getLogger(DefaultLogger.class.getName());
我不确定我的 logging.properties 文件是否正确,但它是从上述指南之一复制而来的
.level = INFO
io.grpc.netty.level=INFO
sun.net.level=INFO
com.altairix.adf.root.log.ServerLogger.handlers=com.google.cloud.logging.LoggingHandler
com.altairix.comm.adf.root.log.DefaultLogger.handlers=com.google.cloud.logging.LoggingHandler
com.google.cloud.logging.LoggingHandler.log=custom_log
com.google.cloud.logging.LoggingHandler.level=FINEST
default : ERROR
com.google.cloud.logging.LoggingHandler.flushLevel=ERROR
com.google.cloud.logging.LoggingHandler.resourceType=container
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s
【问题讨论】:
-
看起来这与日志处理程序有关,但我仍然不确定。有帮助的话可以看看stackoverflow.com/questions/55778891/…。
-
我没有遇到类未找到异常,但它有点相似。我最终不得不使用自定义处理程序 com.google.cloud.logging.LoggingHandler,但 logging.properties 文件仍然存在问题,我认为这是谷歌端的错误
标签: google-app-engine google-cloud-logging