Java 执行 main 方法时关掉日志打印

参考:Java 普通命令行程序main关掉 DEBUG 打印

问题引入

我在 main 方法中执行一个简单的(KafkaProducer发送数据,KafkaConsumer消费数据)测试的时候,
我只想查看一行输出,控制台却出现了很多烦人的日志。
于是,我想把这些日志去除掉。

点击查看(KafkaProducer发送数据,KafkaConsumer消费数据)测试代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.decathlon.sfc.order.bff.core.controller;

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.kafka.common.serialization.StringSerializer;

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Properties;
import java.util.concurrent.Future;

/**
* 测试 kafka
*
* @author 陶攀峰
* @version 1.0
* @date 2020-08-04 10:40
*/
public class KafkaTest {
static class Producer {
//2020-08-04 10:40
public static void main(String[] args) throws Exception {
///////////////设置 Producer 的属性,详情见 ProducerConfig\\\\\\\\\\\\\\\
ProducerConfig producerConfig;
Properties properties = new Properties();
properties.put("bootstrap.servers", "192.168.1.1:9092"); // 设置 Broker 的地址
//properties.put("bootstrap.servers", "122.51.132.35:9092"); // 设置 Broker 的地址
//properties.put("bootstrap.servers", "114.67.98.112:9092"); // 设置 Broker 的地址
properties.put("acks", "1"); // 0-不应答。1-leader 应答。all-所有 leader 和 follower 应答。
properties.put("retries", 3); // 发送失败时,重试发送的次数
//properties.put("batch.size", 16384);
//properties.put("linger.ms", 1);
//properties.put("client.id", "DemoProducer");
//properties.put("buffer.memory", 33554432);
properties.put("key.serializer", StringSerializer.class.getName()); // 消息的 key 的序列化方式
properties.put("value.serializer", StringSerializer.class.getName()); // 消息的 value 的序列化方式

// 创建 KafkaProducer 对象
// 因为我们消息的 key 和 value 都使用 String 类型,所以创建的 Producer 是 <String, String> 的泛型。
// 创建 KafkaProducer 对象
KafkaProducer<String, String> producer = new KafkaProducer<>(properties);

// 创建消息。传入的三个参数,分别是 Topic ,消息的 key ,消息的 message 。
//ProducerRecord<String, String> message = new ProducerRecord<>("tpf", "key", "value");
//
String dateTime = LocalDateTime.now().toString().replace("T", " ");
String json = "{\"now\":\"" + dateTime + "\",\"a\":\"我是a\"}";
String topic = "jingdong.pop.order.orderSplitCommitXmlApi";
topic = "a";
ProducerRecord<String, String> message = new ProducerRecord<>(topic, json);

// 同步发送消息
Future<RecordMetadata> sendResultFuture = producer.send(message);
RecordMetadata result = sendResultFuture.get();
System.out.println("message sent to " + result.topic() + ", partition " + result.partition() + ", offset " + result.offset());
}

}


static class Consumer {
//2020-08-04 10:41
public static void main(String[] args) throws Exception {

///////////////设置 Consumer 的属性,详情见 ConsumerConfig\\\\\\\\\\\\\\\
ConsumerConfig consumerConfig;
Properties props = new Properties();
//props.put("bootstrap.servers", "broker1:9092,broker2:9092");
//props.put("bootstrap.servers", "122.51.132.35:9092");
props.put("bootstrap.servers", "192.168.1.1:9092");
props.put("group.id", "default");
props.put("key.deserializer", StringDeserializer.class.getName());
props.put("value.deserializer", StringDeserializer.class.getName());
//props.put("metrics.recording.level", "INFO");
//props.put("metrics.recording.level", "DEBUG");

//1.创建消费者
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);

//2.订阅Topic
//创建一个只包含单个元素的列表,Topic的名字叫作customerCountries
consumer.subscribe(Collections.singletonList("aaa"));
//支持正则表达式,订阅所有与test相关的Topic
//consumer.subscribe(Pattern.compile("tpf"));

//3.轮询
//消息轮询是消费者的核心API,通过一个简单的轮询向服务器请求数据,一旦消费者订阅了Topic,轮询就会处理所欲的细节,包括群组协调、partition再均衡、发送心跳
//以及获取数据,开发者只要处理从partition返回的数据即可。
try {
while (true) {//消费者是一个长期运行的程序,通过持续轮询向Kafka请求数据。在其他线程中调用consumer.wakeup()可以退出循环
//在100ms内等待Kafka的broker返回数据.超市参数指定poll在多久之后可以返回,不管有没有可用的数据都要返回
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(500));
System.out.println(LocalDateTime.now());
for (ConsumerRecord<String, String> record : records) {
System.out.println(record.topic() + record.partition() + record.offset() + record.key() + record.value());
return;

//consumer.commitSync();
//TimeUnit.SECONDS.sleep(6);
//统计各个地区的客户数量,即模拟对消息的处理
//int updatedCount = 1;
//updatedCount += custCountryMap.getOrDefault(record.value(), 0) + 1;
//custCountryMap.put(record.value(), updatedCount);
//
////真实场景中,结果一般会被保存到数据存储系统中
//JSONObject json = new JSONObject(custCountryMap);
//System.out.println(json.toString(4));
}
}
} finally {
//退出应用程序前使用close方法关闭消费者,网络连接和socket也会随之关闭,并立即触发一次再均衡
consumer.close();
}
}
}
}

在这里插入图片描述

解决方案

src\main\resources下面加入文件logback.xml,内容如下(对,你没有看错,就是下面这个)

1
2
3
4
<?xml version="1.0"?>
<configuration>

</configuration>

在这里插入图片描述