如何解决Google App Engine Java 11无法实例化com.google.cloud.logging.LoggingHandler
我目前正在测试向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没有定义或继承已解析方法的实现,即带有Executor(java.com.google.api.gax.rpc.TransportChannelProvider的抽象方法(java。 com.google.api.gax.rpc.TransportChannelProvider接口的util.concurrent.Executor)。在com.google.api.gax.rpc.ClientContext.create(ClientContext.java:123)在com.google.api.gax.rpc.ClientContext.create(ClientContext.java:140)在com.google.cloud.logging com.google.cloud.logging.LoggingOptions $ DefaultLoggingRpcFactory.create(LoggingOptions.java:61)上的.spi.v2.GrpcLoggingRpc。(GrpcLoggingRpc.java:132),com.google.cloud.logging.LoggingOptions $ DefaultLoggingRpcFactory.create( com.google.cloud.logging.LoggingOptions.getLoggingRpcV2(LoggingOptions.java:129)com.google.cloud.ServiceOptions.getRpc(ServiceOptions.java:561)上的LoggingOptions.java:55) .com.google.cloud.logging.LoggingOptions $ DefaultLoggingFactory.create(LoggingOptions.java:46)的.LoggingImpl。(LoggingImpl.java:109),com.google.cloud.logging.LoggingOptions $ DefaultLoggingFactory.create(LoggingOptions.java: 41)com.google.cloud.logging.LoggingHandler.getLogging(LoggingHandler.java:362)上com.google.cloud.logging.LoggingHandler.getLogging(LoggingHandler.java:362)上的com.google.cloud.ServiceOptions.getService(ServiceOptions.java:541)。位于com.google.cloud.logging.LoggingHandler。(LoggingHandler.java:151)处的LoggingHandler。(LoggingHandler.java:151),位于java.base /处的com.google.cloud.logging.LoggingHandler。(LoggingHandler.java:120) java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)上的jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)java.base / jdk.internal.reflect.DelegatingConstructorAccessorImpl。 .java:45),位于java.base / java.lang.Class.newInstance(Class.java:584),位于java.base / java.lang.reflect.Constructor.newInstance(Constructor.java:490)位于java.logging / java.util.logging.LogManager的java.util.logging.LogManager.createLoggerHandlers(LogManager.java:1000)位于java.logging / java.util.logging.LogManager的$ 4.run(LogManager.java:970) java.base / java.security.AccessController.doPrivileged(本机方法)处的$ 4.run(LogManager.java:966)在java.logging / java.util.logging.LogManager.loadLogg erHandlers(LogManager.java:966)at java.logging / java.util.logging.LogManager.addLogger(LogManager.java:1199)at java.logging / java.util.logging.LogManager.demandLogger(LogManager.java:525)在java.logging / java.util.logging.Logger.demandLogger(Logger.java:654)在java.logging / java.util.logging.LogManager.demandLogger(LogManager.java:515)在java.logging / java.util .logging.Logger.getLogger(Logger.java:717)在java.logging / java.util.logging.Logger.getLogger(Logger.java:701)在com.altairix.comm.adf.root.log.DefaultLogger。( com.altairix.comm.adf.root.log.LoggerFactory的DefaultLogger.java:26).com.altairix.adf.Adf_Server的LoggerFactory.java:7).com.altairix.adf的Adf_Server的(Adf_Server.java:234) java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native方法)上的.root.servlet.AdfServlet。(AdfServlet.java:98)java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java :62),位于java.base / jdk.internal.reflect.DelegatingConstructorAcc essorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.base / java.lang.reflect.Constructor.newInstance(Constructor.java:490)at java.base / java.lang.Class.newInstance(Class.java:584)在org.eclipse.jetty处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.initServlet(ServletHolder.java:588)的org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:472的.servlet.ServletHolder.newInstance(ServletHolder.java:1207) )(位于org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:752)的org.eclipse.jetty.servlet.ServletHolder.ensureInstance(ServletHolder.java:767)处。位于org.eclipse.jetty.security.SecurityHand的doHandle(ServletHandler.java:582)在org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)的ler.handle(SecurityHandler.java:577)org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java: 1127),位于org.eclipse.jetty.server.session的org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515),位于org.eclipse.jetty.server的org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)。 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)上的.handler.ContextHandler.doScope(ContextHandler.java:1061)在org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper) .java:97),位于org.eclipse.jetty.server.Server.handle(Server.java:499),位于org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311),位于org.eclipse.jetty。 org.eclipse.jetty.io.AbstractConnection $ 2.run(AbstractConnection.java:544)处的server.HttpConnection.onFillable(HttpConnection.java:257)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
解决方法
我能够通过向记录器添加处理程序来解决此问题:
import com.google.cloud.logging.LoggingHandler;
...
logger.addHandler(new LoggingHandler());
并删除对logging.properties文件的引用,但我不认为这是预期用途,并且在尝试使用logging.properties文件时似乎存在错误
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。