簡體   English   中英

使用 Pulsar 作為 Log4j2 的附加程序:如何停止記錄確認?

[英]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.

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