問題描述
使用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中的日志,導緻産生大量日志内容,幹擾正常的業務日志,需要關閉。
問題解答
這是因為Event Hub SDK使用的日志也是使用 log4j 輸出日志,是以當整個項目配置 log4j.properties 的日志級别定義為Debug後, Event Hub SDK中所記錄的日志同樣輸出到Console頁面。 當不需要DEBUG級别日志的時候,隻需要在配置檔案中去掉即可!
在log4j.properties中去掉 debug 配置即可。改為 error 或者是 Warn級别,既能減少日志輸出!
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
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!