【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中的日志,导致产生大量日志内容,干扰正常的业务日志,需要关闭。
问题解答
这是因为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
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!