[英]Using Pulsar as appender to Log4j2: How to stop logging acknowledgements?
我有一個Producer
,它使用 Apache Pulsar 作為 Log4j2 的附加程序來記錄消息。
Consumer
正在監聽同一個 Pulsar 主題並將接收到的消息寫入日志文件。 Consumer
能夠正確接收消息,但問題是它也在記錄其他內容:
[localhost/127.0.0.1:6650] Received cmd LOOKUP_RESPONSE
Received Broker lookup response: Connect
[coinflex_logs][coinflex_logs_sub] Subscribing to topic on cnx [id: 0xb78fd850, L:/127.0.0.1:53782 - R:localhost/127.0.0.1:6650]
[localhost/127.0.0.1:6650] Received cmd SUCCESS
[id: 0xb78fd850, L:/127.0.0.1:53782 - R:localhost/127.0.0.1:6650] Received success response from server: 2
[coinflex_logs][coinflex_logs_sub] Subscribed to topic on localhost/127.0.0.1:6650 -- consumer: 0
[coinflex_logs] [coinflex_logs_sub] Adding 1000 additional permits
[localhost/127.0.0.1:6650] Received cmd MESSAGE
[id: 0xb78fd850, L:/127.0.0.1:53782 - R:localhost/127.0.0.1:6650] Received a message from the server: org.apache.pulsar.common.api.proto.PulsarApi$CommandMessage@2dab32d1
[coinflex_logs][coinflex_logs_sub] Received message: 3828/25
SSE4.2 CRC32C provider initialized
[coinflex_logs_sub] [aa9ca] processing message num - 0 in batch
[coinflex_logs_sub] [aa9ca] enqueued messages in batch. queue size - 0, available queue size - 2147483647
15:23:59.459 [main] DEBUG com.pulsar_logging_producer.Producer -==========TEST MESSAGE=============
[coinflex_logs_sub] [aa9ca] can ack message to broker 3828:25:-1:0, acktype Individual, cardinality 0, length 1
[coinflex_logs_sub] [aa9ca] acknowledging message - 3828:25:-1:0, acktype Individual
[ConsumerBase{subscription='coinflex_logs_sub', consumerName='aa9ca', topic='coinflex_logs'}] Flushing pending acks to broker: last-cumulative-ack: -1:-1:-1 -- individual-acks: []
[localhost/127.0.0.1:6650] Received cmd PING
[[id: 0xb78fd850, L:/127.0.0.1:53782 - R:localhost/127.0.0.1:6650]] Replying back to ping message
[[id: 0xb78fd850, L:/127.0.0.1:53782 - R:localhost/127.0.0.1:6650]] Sending ping message
[localhost/127.0.0.1:6650] Received cmd PONG
希望日志只是:
15:23:59.459 [main] DEBUG com.pulsar_logging_producer.Producer -==========TEST MESSAGE=============
消費者.java:
public class Consumer {
org.apache.pulsar.client.api.Consumer<byte[]> consumer;
PulsarClient client;
private final String SERVICE_URL = "pulsar://localhost:6650";
private static final Logger logger = LogManager.getLogger(Consumer.class);
public Consumer(String topic, String subName) throws PulsarClientException {
client = PulsarClient.builder()
.serviceUrl(SERVICE_URL)
.build();
consumer = client.newConsumer()
.topic(topic)
.subscriptionName(subName)
.subscribe();
}
public void listen() throws PulsarClientException {
while (true) {
Message msg = consumer.receive();
logger.trace(new String(msg.getData()));
try {
System.out.printf("Message received: %s\n", new String(msg.getData()));
consumer.acknowledge(msg);
} catch (Exception e) {
System.out.println("MESSAGE FAILED");
consumer.negativeAcknowledge(msg);
}
}
}
public void close() {
try {
consumer.close();
client.close();
} catch (PulsarClientException e) {
e.printStackTrace();
}
}
}
制片人.java:
public class Producer {
private static final Logger logger = LogManager.getLogger(Producer.class);
public static void main(String[] args) {
String msg = "==========TEST MESSAGE=============";
System.out.printf("Message sent: %s\n", msg);
logger.debug(msg);
}
}
生產者的 log4j2.xml:
<Configuration status="WARN">
<Properties>
<Property name="DEFAULT_PATTERN" value="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} -%msg%n"/>
</Properties>
<Appenders>
<Pulsar name="pulsarAppender" serviceUrl="pulsar://localhost:6650" topic="coinflex_logs" avoidRecursive="false">
<PatternLayout pattern="${DEFAULT_PATTERN}"/>
</Pulsar>
</Appenders>
<Loggers>
<Logger name="org.apache.pulsar" level="INFO"/>
<Root level="debug">
<AppenderRef ref="pulsarAppender"/>
</Root>
</Loggers>
</Configuration>
原來我的問題是因為我總是默認使用根記錄器,所以脈沖星消息也被記錄在那里。 我需要做的就是讓根記錄器記錄到控制台,讓Consumer
記錄器記錄到rollingFileAppender
:
<Configuration status="WARN">
<Properties>
<Property name="LOG_DIR" value="logs"/>
</Properties>
<Appenders>
<Console name="consoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%msg%n"/>
</Console>
<RollingFile
name="rollingFileAppender"
fileName="${LOG_DIR}/coinflex_v2.log"
filePattern="${LOG_DIR}/coinflex_v2_%i.log"
>
<PatternLayout pattern="%msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="consoleAppender"/>
</Root>
<Logger name="com.pulsar_logging_consumer.Consumer" level="debug" additivity="false">
<AppenderRef ref="rollingFileAppender"/>
</Logger>
</Loggers>
</Configuration>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.