禁止将春季启动打印错误发送到stderr



我的服务(从SQS轮询项目的类(的入口点中有一个try/catch/finally块
我想捕获从我的服务中抛出的每一个异常并将其抛出,这样SQS就可以重新驱动它。
然而,这也会导致spring引导容器将堆栈跟踪打印到控制台,然后控制台将其记录到我的日志聚合器中
我已经有了一个用于有意义的日志记录的基础设施,它使用MDC向每个日志消息添加重要的元数据,因此我希望在记录异常时使用它。

这是我的代码:

@SqsListener(value = "${src.queue.name}", deletionPolicy = SqsMessageDeletionPolicy.NO_REDRIVE)
public void consume(String msgJson) {
String awsKeyJson = JsonUtils.fromJson(msgJson).get("Message").asText();
String awsKey = JsonUtils.fromJson(awsKeyJson, AwsKey.class).getKey();
ScanResponseContainer src = s3.getResourceAsObject(SRC_BUCKET_NAME, awsKey, ScanResponseContainer.class);
mdcService.initializeMDC(src, awsKey);
logger.info("Received Scan Response Container from SQS");
try {
ScannedMerchant sm = scanResponseContainerService.handleScanResponseContainer(src);
producer.produce(sm);
logger.info("Successfully processed Scan Response Container");
} catch (Exception e) {
throw new RuntimeException("Error thrown when processing Scan Response Container", e);
} finally {
mdcService.clearMDC();
eventCollector.clear();
}
}

我的问题是-我可以添加到捕获块:

logger.error(e);

它会用一条有意义的日志消息来记录错误
然而,它仍然会记录"毫无意义的";消息,因为spring仍然会将其打印到控制台,然后我会在日志聚合器中得到重复的消息
我是否可以使用某种拦截器,它仍然会抛出异常,但不会将堆栈跟踪打印到stderr?

您可以设置spring boot包的日志级别。对于特性文件,可以将其设置为"关闭"或"致命"。

logging.level.org.springframework=OFF

如果您有xml用于记录器配置

<logger name="org.springframework" level="OFF" additivity="false">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</logger>

Logback更新:Spring文档
Logback Level

堆栈溢出:Logback级别关闭问题。

相关内容

最新更新