java - 如何查看并添加到 java spring boot 项目中引用的库中的日志?
问题描述
我有一个使用库的弹簧启动应用程序:(SimpleMessageListenerContainer
https://docs.spring.io/spring-amqp/docs/current/api/org/springframework/amqp/rabbit/listener/SimpleMessageListenerContainer.html )和SimpleMessageListenerContainerFactory
(https: //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 的位置查看所有日志记录?任何帮助将非常感激!
解决方案
推荐阅读
- java - 在 OpenCV 示例项目中将图像文件作为参数传递
- swift - 为什么在将数据写入 Firebase 数据库时无法执行 segue?
- acumatica - 如何使自动完成不显示值字段而只显示文本字段?
- ios - Xamarin iOS:为什么相机不盖住谁的屏幕,两边都留白
- javascript - 我的 Joomla 模板正在使用 JS 加载我的自定义 CSS。有没有办法将唯一的版本标签添加到我的自定义 CSS 中?即:custom.css?20180101
- jquery - 在 $.when 之后更改 URL
- python - 向 Kivy MeshLinePlot 添加多个图
- python - 每组 Python Pandas 的总滚动日历天数
- c - 有没有办法将未知类型的数组作为参数传递给 C 中的函数?
- android - React Native:使用 `pop()` 或 `goBack()` 时的性能问题,导致无限循环。但是使用`reset`很好