問題描述
Azure Event Hub 在標(biāo)準(zhǔn)版以上就默認(rèn)啟用的Kafka終結(jié)點剧防,所以可以通過Apache Kafka協(xié)議連接到Event Hub進(jìn)行消息的生產(chǎn)和消費。通過示例代碼下載到本地運行后,發(fā)現(xiàn)沒有 Kafka Producer 的詳細(xì)日志輸出公给。當(dāng)查看SDK源碼中基协,發(fā)現(xiàn)使用的是 org.slf4j.Logger 輸出日志,如:
但是剑按,當(dāng)運行 Producer 代碼后疾就,得到的輸出取沒有包含連接的詳細(xì)信息,對出現(xiàn)連接問題的Debug沒有任何幫助吕座。
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Test Data #0 from thread #18 org.apache.kafka.common.errors.IllegalSaslStateException: Invalid SASL mechanism response, server may be expecting a different protocol
那么如何來輸出更加詳細(xì)的日志呢虐译?
問題解決
根據(jù)日志顯示, SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 明確指出是因為沒有加載到 org.slf4j.impl.StaticLoggerBinder 類吴趴,因為在程序執(zhí)行的過程中漆诽,必須提供實際的日志記錄實現(xiàn),否則SLF4J講忽略所有日志信息锣枝,SLF4J API 通過 SLF4J 綁定與實際的日志記錄實現(xiàn)進(jìn)行通信Log4j厢拭。所以需要在pom.xml中引入 org.slf4j 的相關(guān)依賴。
在pom.xml中加入
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
然后撇叁,添加上log4j的配置文件供鸠,在resources文件夾下添加名為 log4j.properties文件,內(nèi)容為:
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to 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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n
修改后的文件內(nèi)容如截圖所示:
修改完成陨闹,運行得到完整日志
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/.m2/repository/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2022-01-11 20:03:12 INFO ProducerConfig - ProducerConfig values:
acks = 1
batch.size = 16384
bootstrap.servers = [testeventxxxxxx.servicebus.chinacloudapi.cn:9093]
buffer.memory = 33554432
client.id = KafkaExampleProducer
compression.type = none
connections.max.idle.ms = 540000
enable.idempotence = false
interceptor.classes = null
key.serializer = class org.apache.kafka.common.serialization.LongSerializer
linger.ms = 0
max.block.ms = 60000
max.in.flight.requests.per.connection = 5
max.request.size = 1048576
metadata.max.age.ms = 300000
metric.reporters = []
metrics.num.samples = 2
metrics.recording.level = INFO
metrics.sample.window.ms = 30000
security.protocol = SASL_SSL
send.buffer.bytes = 131072
ssl.cipher.suites = null
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
ssl.endpoint.identification.algorithm = null
ssl.key.password = null
ssl.keymanager.algorithm = SunX509
ssl.keystore.location = null
ssl.keystore.password = null
ssl.keystore.type = JKS
ssl.protocol = TLS
ssl.provider = null
ssl.secure.random.implementation = null
ssl.trustmanager.algorithm = PKIX
ssl.truststore.location = null
ssl.truststore.password = null
ssl.truststore.type = JKS
transaction.timeout.ms = 60000
transactional.id = null
value.serializer = class org.apache.kafka.common.serialization.StringSerializer
2022-01-11 20:03:16 INFO AbstractLogin - Successfully logged in.
2022-01-11 20:03:17 INFO AppInfoParser - Kafka version : 1.0.0
2022-01-11 20:03:17 INFO AppInfoParser - Kafka commitId : aaa7af6d4a11b29d
2022-01-11 20:03:21 INFO TestProducer - test java logs : info
2022-01-11 20:03:21 ERROR TestProducer - test java logs : error
2022-01-11 20:03:21 WARN TestProducer - test java logs : warn
Test Data #0 from thread #18
2022-01-11 20:03:22 ERROR NetworkClient - [Producer clientId=KafkaExampleProducer] Connection to node -1 failed authentication due to: Invalid SASL mechanism response, server may be expecting a different protocol
org.apache.kafka.common.errors.IllegalSaslStateException: Invalid SASL mechanism response, server may be expecting a different protocol
org.apache.kafka.clients.producer.KafkaProducer@47dec663
參考資料
Slf4j Configuration File Example:https://examples.javacodegeeks.com/enterprise-java/slf4j/slf4j-configuration-file-example/
將 Apache Flink 與適用于 Apache Kafka 的 Azure 事件中心配合使用: https://docs.azure.cn/zh-cn/event-hubs/event-hubs-kafka-flink-tutorial
在微軟云中國區(qū) (Mooncake) 上實驗以Apache Kafka協(xié)議方式發(fā)送/接受Event Hubs消息 (Java版) : https://www.cnblogs.com/lulight/p/14375190.html
當(dāng)在復(fù)雜的環(huán)境中面臨問題楞捂,格物之道需:濁而靜之徐清,安以動之徐生趋厉。 云中寨闹,恰是如此!
分類: 【Azure 事件中心】
標(biāo)簽: Azure Developer, Azure Event Hub + Kafka, 事件中心 Azure Event Hub, 日志輸出