首页 > 解决方案 > 如何查看并添加到 java spring boot 项目中引用的库中的日志?

问题描述

我有一个使用库的弹簧启动应用程序:(SimpleMessageListenerContainerhttps://docs.spring.io/spring-amqp/docs/current/api/org/springframework/amqp/rabbit/listener/SimpleMessageListenerContainer.html SimpleMessageListenerContainerFactoryhttps: //www.javadoc.io/static/org.springframework.cloud/spring-cloud-aws-messaging/2.2.0.RELEASE/org/springframework/cloud/aws/messaging/config/SimpleMessageListenerContainerFactory.html)。该应用程序使用 ASW SQS 和 Kafka,但我遇到了一些乱序数据并试图调查原因。有没有办法从库中查看日志记录?我知道我不能直接编辑它们,但是当我创建 bean 时,我希望能够查看这两个库中的日志,并在可能的情况下添加它们。

目前我正在以这种方式设置bean:

@ConditionalOnProperty(value = "application.listener-mode", havingValue = "SQS")
@Component
public class SqsConsumer {

    private final static Logger logger = LoggerFactory.getLogger(SqsConsumer.class);

    @Autowired
    private ConsumerMessageHandler consumerMessageHandler;

    @Autowired
    private KafkaProducer producer;

    @PostConstruct
    public void init() {
        logger.info("Loading SQS Listener Bean");
    }

    @SqsListener("${application.aws-iot.sqs-url}")
    public void receiveMessage(String message) {
        byte[] decodedValue = Base64.getDecoder().decode(message);
        consumerMessageHandler.handle(decodedValue, message);
    }

    @Bean
    public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSqs) {
        SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
        factory.setAmazonSqs(amazonSqs);
        factory.setMaxNumberOfMessages(10);
        factory.setWaitTimeOut(20);
        logger.info("Created simpleMessageListenerContainerFactory");
        logger.info(factory.toString());
        return factory;
    }
}

作为参考,这是SimpleMessageListenerContainer. 我想调查并可能添加到的正是这些日志:

        @Override
        public void run() {
            while (isQueueRunning()) {
                try {
                    ReceiveMessageResult receiveMessageResult = getAmazonSqs()
                            .receiveMessage(
                                    this.queueAttributes.getReceiveMessageRequest());
                    CountDownLatch messageBatchLatch = new CountDownLatch(
                            receiveMessageResult.getMessages().size());
                    for (Message message : receiveMessageResult.getMessages()) {
                        if (isQueueRunning()) {
                            MessageExecutor messageExecutor = new MessageExecutor(
                                    this.logicalQueueName, message, this.queueAttributes);
                            getTaskExecutor().execute(new SignalExecutingRunnable(
                                    messageBatchLatch, messageExecutor));
                        }
                        else {
                            messageBatchLatch.countDown();
                        }
                    }
                    try {
                        messageBatchLatch.await();
                    }
                    catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                    }
                }
                catch (Exception e) {
                    getLogger().warn(
                            "An Exception occurred while polling queue '{}'. The failing operation will be "
                                    + "retried in {} milliseconds",
                            this.logicalQueueName, getBackOffTime(), e);
                    try {
                        // noinspection BusyWait
                        Thread.sleep(getBackOffTime());
                    }
                    catch (InterruptedException ie) {
                        Thread.currentThread().interrupt();
                    }
                }
            }

            SimpleMessageListenerContainer.this.scheduledFutureByQueue
                    .remove(this.logicalQueueName);
        }

我如何能够从创建 bean 的位置查看所有日志记录?任何帮助将非常感激!

标签: javaspring-bootloggingamazon-sqsspring-bean

解决方案


推荐阅读