我正在為一個專案設定日志記錄并想知道是否可以將 id 發送到 postges 資料庫。后來我會用 fluentd 收集所有日志,并使用 efk(elastic search, fluentd, kibana) 堆疊來查看日志。這就是為什么如果可以在資料庫日志中設定 id 會非常有幫助。
uj5u.com熱心網友回復:
您可以讓您的連接將 application_name 設定為包含您想要的 id 的內容,然后配置您的日志記錄以包含 application_name 欄位。或者您可以在 SQL 注釋中包含 id,例如select /* I am number 6 */ whatever from whereever. 但是,只有包含 sql 的日志訊息才能看到 id。(把評論放在select關鍵字后面的原因是有些客戶端會去掉前導評論,所以服務人員永遠不會看到它們)
uj5u.com熱心網友回復:
謝謝@jjane,給了我這么好的主意。經過一番谷歌搜索后,我找到了一個描述如何攔截休眠日志的頁面, 然后我對如何將檢查器添加到 spring-boot 進行了更多研究,這是我想出的解決方案:
@Component
public class SqlCommentStatementInspector
implements StatementInspector {
private static final Logger LOGGER = LoggerFactory
.getLogger(
SqlCommentStatementInspector.class
);
private static final Pattern SQL_COMMENT_PATTERN = Pattern
.compile(
"\\/\\*.*?\\*\\/\\s*"
);
@Override
public String inspect(String sql) {
LOGGER.info(
"Repo log, Correlation_id:" MDC.get(Slf4jMDCFilter.MDC_UUID_TOKEN_KEY),
sql
);
return String.format("/*Correlation_id: %s*/", MDC.get(Slf4jMDCFilter.MDC_UUID_TOKEN_KEY)) SQL_COMMENT_PATTERN
.matcher(sql)
.replaceAll("");
}
}
及其配置:
@Configuration
public class HibernateConfiguration implements HibernatePropertiesCustomizer {
@Autowired
private SqlCommentStatementInspector myInspector;
@Override
public void customize(Map<String, Object> hibernateProperties) {
hibernateProperties.put("hibernate.session_factory.statement_inspector", myInspector);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/313931.html
標籤:PostgreSQL 弹簧靴 日志记录
