scala - 控制台 log4j2 kafka:找不到记录器的附加程序(kafka.utils.Log4jControllerRegistration$)
问题描述
我试图Kafka
简单地logging
通过console
,但是在安装我的 sw 之后,我一直看到这个错误。
我的log4j2.xml
:
我的pom.xml
包括这个依赖:
[INFO] +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.12.:compile
[INFO] | +- org.apache.logging.log4j:log4j-api:jar:2.12.1:compile
[INFO] | \- org.apache.logging.log4j:log4j-core:jar:2.12.1:runtime
[INFO] +- org.apache.logging.log4j:log4j-api-scala_2.12:jar:11.0:compile
我的主要课程是一个非常简单的消费者:
class Consumer(val brokers: String,
val groupId: String,
val topic: String) extends Logging {
val props: Properties = createConsumerConfig(brokers, groupId)
val consumer: KafkaConsumer[String, User] = new KafkaConsumer[String, User](props)
var executor: ExecutorService = _
def shutdown() = {
if (consumer != null)
consumer.close()
if (executor != null)
executor.shutdown()
}
def createConsumerConfig(brokers: String, groupId: String): Properties = {
val props = new Properties()
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers)
props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId)
props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true")
props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000")
props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "30000")
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer")
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "kafka.UserDeserializer")
props
}
def run(): Unit = {
consumer.subscribe(Collections.singletonList(this.topic))
Executors.newSingleThreadExecutor.execute(() => {
while (true) {
val records: ConsumerRecords[String, User] = consumer.poll(ofMillis(1000))
records
.forEach(r => {
logger.info("Received message: (" + r.key() + ", " + r.value() + ") at offset " + r.offset())
})
}
})
}
因此,当package
我的应用程序run
通过命令行时java -jar
,前几行是:
log4j:WARN No appenders could be found for logger (kafka.utils.Log4jControllerRegistration$).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
我究竟做错了什么?我尝试了很多依赖版本组合,并尝试将我的更改log4j2.xml
为 alog4j2.properties
但我从未设法注册它logger
:<
请建议我实现最简单的日志的方法!
解决方案
试试这个,很简单
maven dependency
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
在您的代码中导入
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
初始化你的日志
private void run() {
// logger
Logger logger = LoggerFactory.getLogger(ConsumerDemoWithThread.class.getName());
使用日志跟踪流程
// add a shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread( () -> {
logger.info("Caught shutdown hook"); // log
((ConsumerRunnable) myConsumerRunnable).shutdown();
try {
latch.await();
} catch(InterruptedException e) {
e.printStackTrace();
}
logger.info("Application has exited"); // log
}));
try {
latch.await();
} catch(InterruptedException e) {
logger.error("Application got interrupted", e); // log
} finally {
logger.info("Application is closing"); // log
}
}
我希望它能给你一些线索。问候。
推荐阅读
- git - Git - 将分支移植到当前 HEAD 下方的 master 上(分支是从 HEAD 下方的 master 创建的)
- winsock - Excel VBA中的Winsock断开连接
- php - 获取不同的列并返回过滤结果
- mysql - mySQL 中的存储过程问题
- javascript - 关闭浏览器窗口时调用 logout.aspx 页面
- python - TensorFlow.js Stateful SimpleRNN Tensor 被配置
- arduino - 我可以使用我的 Arduino Uno 将传感器和蓝牙芯片连接到我的 L293D DC Motor Drive Shield 上吗?
- python - YOLO 锚箱
- php - 使用 PHPMailer 发送 HTML 格式的邮件
- crystal-reports - 如何使用水晶报表将 1,2,3,4 更改为 F1,F2,F3,F4