我在我的服務(從 SQS 輪詢專案的類)的入口點有一個 try/catch/finally 塊。
我想捕獲從我的服務中拋出的每個例外并將其丟棄,以便 SQS 可以重新驅動它。
但是,這也會導致 Spring Boot 容器將堆疊跟蹤列印到控制臺,然后控制臺將其記錄到我的日志聚合器中。
我已經有一個用于有意義的日志記錄的基礎設施,它使用 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();
}
}
我的問題是 - 我可以添加到 catch 塊:
logger.error(e);
它會使用有意義的日志訊息記錄錯誤。
但是,它仍然會記錄“無意義”的訊息,因為 spring 仍然會將它列印到控制臺,然后我會在我的日志聚合器中得到重復的訊息。
是否有某種我可以使用的攔截器仍然會拋出例外但抑制將堆疊跟蹤列印到stderr?
uj5u.com熱心網友回復:
您可以設定spring boot包的日志級別。對于屬性檔案,您可以將其設定為 OFF 或 FATAL。
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級別
Stackoverflow:Logback 級別關閉問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/426251.html
