簡體   English   中英

PulsarClient.builder() 極長的錯誤記錄器

[英]PulsarClient.builder() extremely long error logger

我正在嘗試制作一個用 java 編寫的脈沖星客戶端,但是記錄器(slf4j)出現錯誤。 我認為這是因為我的 PropertyConfigurator 做得不好,但即使我使用 defaultConfigurator 我也會得到同樣的極長錯誤......當我試圖讓我的 PulsarClient 像這樣時它會中斷:

this.client = PulsarClient.builder()
              .serviceUrl(config.get("target"))
              .authentication(AuthenticationFactory.token(token))
              .build();

我得到的錯誤:

main DEBUG logging.InternalLoggerFactory - Using SLF4J as the default logging framework
 main DEBUG internal.PlatformDependent0 - -Dio.netty.noUnsafe: false
 main DEBUG internal.PlatformDependent0 - Java version: 11
 main DEBUG internal.PlatformDependent0 - sun.misc.Unsafe.theUnsafe: available
 main DEBUG internal.PlatformDependent0 - sun.misc.Unsafe.copyMemory: available
 main DEBUG internal.PlatformDependent0 - java.nio.Buffer.address: available
 main DEBUG internal.PlatformDependent0 - direct buffer constructor: unavailable
 java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
        at org.apache.pulsar.shade.io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent0$4.run(PlatformDependent0.java:233)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:227)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:289)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:92)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Native.loadNativeLibrary(Native.java:247)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Native.<clinit>(Native.java:69)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Epoll.<clinit>(Epoll.java:39)
        at org.apache.pulsar.common.util.netty.EventLoopUtil.newEventLoopGroup(EventLoopUtil.java:46)
        at org.apache.pulsar.client.impl.PulsarClientImpl.getEventLoopGroup(PulsarClientImpl.java:743)
        at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:129)
        at org.apache.pulsar.client.impl.ClientBuilderImpl.build(ClientBuilderImpl.java:64)
        at demo.demo_user.main(demo_user.java:34)
main DEBUG internal.PlatformDependent0 - java.nio.Bits.unaligned: available, true
 main DEBUG internal.PlatformDependent0 - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
 java.lang.IllegalAccessException: class org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent0$6 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @33cb5951
        at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361)
        at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591)
        at java.base/java.lang.reflect.Method.invoke(Method.java:558)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent0$6.run(PlatformDependent0.java:347)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:338)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:289)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:92)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Native.loadNativeLibrary(Native.java:247)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Native.<clinit>(Native.java:69)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Epoll.<clinit>(Epoll.java:39)
        at org.apache.pulsar.common.util.netty.EventLoopUtil.newEventLoopGroup(EventLoopUtil.java:46)
        at org.apache.pulsar.client.impl.PulsarClientImpl.getEventLoopGroup(PulsarClientImpl.java:743)
        at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:129)
        at org.apache.pulsar.client.impl.ClientBuilderImpl.build(ClientBuilderImpl.java:64)
        at demo.demo_user.main(demo_user.java:34)
main DEBUG internal.PlatformDependent0 - java.nio.DirectByteBuffer.<init>(long, int): unavailable
 main DEBUG internal.PlatformDependent - sun.misc.Unsafe: available
 main DEBUG internal.PlatformDependent - maxDirectMemory: 4148166656 bytes (maybe)
 main DEBUG internal.PlatformDependent - -Dio.netty.tmpdir: /tmp (java.io.tmpdir)
 main DEBUG internal.PlatformDependent - -Dio.netty.bitMode: 64 (sun.arch.data.model)
 main DEBUG internal.PlatformDependent - -Dio.netty.maxDirectMemory: -1 bytes
 main DEBUG internal.PlatformDependent - -Dio.netty.uninitializedArrayAllocationThreshold: -1
 main DEBUG internal.CleanerJava9 - java.nio.ByteBuffer.cleaner(): available
 main DEBUG internal.PlatformDependent - -Dio.netty.noPreferDirect: false
 main DEBUG internal.NativeLibraryLoader - -Dio.netty.native.workdir: /tmp (io.netty.tmpdir)
 main DEBUG internal.NativeLibraryLoader - -Dio.netty.native.deleteLibAfterLoading: true
 main DEBUG internal.NativeLibraryLoader - -Dio.netty.native.tryPatchShadedId: true
 main DEBUG internal.NativeLibraryLoader - Unable to load the library 'org_apache_pulsar_shade_netty_transport_native_epoll_x86_64', trying other loading mechanism.
 java.lang.UnsatisfiedLinkError: no org_apache_pulsar_shade_netty_transport_native_epoll_x86_64 in java.library.path: [/usr/java/packages/lib, /usr/lib/x86_64-linux-gnu/jni, /lib/x86_64-linux-gnu, /usr/lib/x86_64-linux-gnu, /usr/lib/jni, /lib, /usr/lib]
        at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2673)
        at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
        at java.base/java.lang.System.loadLibrary(System.java:1873)
        at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:371)

(等等......)我在 pom.xml 中有很好的依賴關系,但我不明白客戶端初始化時到底發生了什么......我的 log4j.properties 是基本的

 log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%t %-5p %c{2} - %m%n 

所以我想問有沒有人知道這是怎么回事? 我認為這可能是連接錯誤,但我不確定如何解決問題。 先感謝您。

經過進一步調查,這些似乎是 pulsar 客戶端啟動時的調試級別輸出。

例如,帶有上述消息的第一個堆棧跟蹤

 main DEBUG internal.PlatformDependent0 - direct buffer constructor: unavailable
 java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
        at org.apache.pulsar.shade.io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent0$4.run(PlatformDependent0.java:233)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:227)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:289)
        at org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:92)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Native.loadNativeLibrary(Native.java:247)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Native.<clinit>(Native.java:69)
        at org.apache.pulsar.shade.io.netty.channel.epoll.Epoll.<clinit>(Epoll.java:39)
        at org.apache.pulsar.common.util.netty.EventLoopUtil.newEventLoopGroup(EventLoopUtil.java:46)
        at org.apache.pulsar.client.impl.PulsarClientImpl.getEventLoopGroup(PulsarClientImpl.java:743)
        at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:129)
        at org.apache.pulsar.client.impl.ClientBuilderImpl.build(ClientBuilderImpl.java:64)
        at demo.demo_user.main(demo_user.java:34)

由以下源代碼行生成( https://github.com/netty/netty/blob/netty-4.1.51.Final/common/src/main/java/io/netty/util/internal/PlatformDependent0.java #L261 )

            if (maybeDirectBufferConstructor instanceof Constructor<?>) {
                address = UNSAFE.allocateMemory(1);
                // try to use the constructor now
                try {
                    ((Constructor<?>) maybeDirectBufferConstructor).newInstance(address, 1);
                    directBufferConstructor = (Constructor<?>) maybeDirectBufferConstructor;
                    logger.debug("direct buffer constructor: available");
                } catch (InstantiationException e) {
                    directBufferConstructor = null;
                } catch (IllegalAccessException e) {
                    directBufferConstructor = null;
                } catch (InvocationTargetException e) {
                    directBufferConstructor = null;
                }
            } else {
                logger.debug(
                        "direct buffer constructor: unavailable",
                        (Throwable) maybeDirectBufferConstructor);
                directBufferConstructor = null;
            }

以下幾行也是此 class ( io.netty.util.internal.PlatformDependent0 ) 初始化的調試級別 output。

如果你不想看到這個調試 output 你有幾個選擇:

  • 完全禁用調試級別 output: log4j.rootLogger=info, stdout

  • 從 Apache Pulsar 禁用調試級別 output:

    log4j.logger.org.apache.pulsar=info添加到 log4.properties

  • 為此 class PlatformDependent0禁用調試級別 output :

    log4j.logger.org.apache.pulsar.shade.io.netty.util.internal.PlatformDependent0=info添加到 log4.properties

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM