天天看點

【Azure 事件中心】關閉或開啟Azure Event Hub SDK中的日志輸出

問題描述

使用Azure Event Hub的Java SDK 作為消費端消費消息,內建在項目中後,發現大量日志産生,并且都是Debug 級别日志,如何來關閉這部分日志輸出呢?

import com.azure.messaging.eventhubs.EventHubClientBuilder;
import com.azure.messaging.eventhubs.EventProcessorClient;
import com.azure.messaging.eventhubs.EventProcessorClientBuilder;
import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore;
import com.azure.messaging.eventhubs.models.EventContext;
import com.azure.storage.blob.BlobContainerAsyncClient;
import com.azure.storage.blob.BlobContainerClientBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
 
@component
@slf4j
public class AzureDeviceLifecycleListener {
 
private static String connectionString = "Endpoint=*****";
private static String storageConnectionString = "******";
private static String storageContainerName = "*******";
 
private static BlobContainerAsyncClient blobContainerAsyncClient = new BlobContainerClientBuilder()
        .connectionString(storageConnectionString)
        .containerName(storageContainerName)
        .buildAsyncClient();
 
private static EventProcessorClient eventProcessorClient;
 
private static void doProcessEvent(EventContext eventContext) {
    byte[] body = eventContext.getEventData().getBody();
    System.out.println("body string: " + new String(body));
}
 
public static void main(String[] args) {
    eventProcessorClient = new EventProcessorClientBuilder()
            .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME)
            .connectionString(connectionString)
            .checkpointStore(new BlobCheckpointStore(blobContainerAsyncClient))
            .processEvent(AzureDeviceLifecycleListener::doProcessEvent)
            .processError(errorContext -> log.error("Error occurred while processing azure events " + errorContext.getThrowable().getMessage()))
            .buildEventProcessorClient();      

在應用啟動後,輸出了大量Event Hub SDK中的日志,導緻産生大量日志内容,幹擾正常的業務日志,需要關閉。

【Azure 事件中心】關閉或開啟Azure Event Hub SDK中的日志輸出

問題解答

這是因為Event Hub SDK使用的日志也是使用 log4j 輸出日志,是以當整個項目配置 log4j.properties 的日志級别定義為Debug後, Event Hub SDK中所記錄的日志同樣輸出到Console頁面。 當不需要DEBUG級别日志的時候,隻需要在配置檔案中去掉即可!

在log4j.properties中去掉 debug 配置即可。改為 error 或者是 Warn級别,既能減少日志輸出!

【Azure 事件中心】關閉或開啟Azure Event Hub SDK中的日志輸出
og4j.rootCategory=INFO, stdout , R

此句為将等級為INFO的日志資訊輸出到stdout和R這兩個目的地,
stdout和R的定義在下面的代碼,可以任意起名。
等級可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,
如果配置OFF則不打出任何資訊,
如果配置為INFO這樣隻顯示INFO, WARN, ERROR的log資訊,
而DEBUG資訊不會被顯示

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

此句為定義名為stdout的輸出端是哪種類型,有:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(檔案)
org.apache.log4j.DailyRollingFileAppender(每天産生一個日志檔案)
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候産生一個新的檔案)
org.apache.log4j.WriterAppender(将日志資訊以流格式發送到任意指定的地方)      

參考檔案

java日志檔案log4j.properties配置詳解: https://www.cnblogs.com/cuiqq/p/11175975.html

當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!

繼續閱讀