【问题标题】:Is there a way to log correlation id (sent from microservice) in Postgres有没有办法在 Postgres 中记录相关 ID(从微服务发送)
【发布时间】:2021-12-01 20:41:22
【问题描述】:

我正在为一个项目设置日志记录,并且想知道是否可以将 id 发送到 postges 数据库。后来我会用 fluentd 收集所有日志,并使用 efk(elastic search, fluentd, kibana) 堆栈来查看日志。这就是为什么如果可以在数据库日志中设置 id 将非常有用。

【问题讨论】:

    标签: postgresql spring-boot logging


    【解决方案1】:

    谢谢@jjane, 给了我这么好的主意。经过一番谷歌搜索后,我找到了一个描述如何拦截休眠的页面logs 然后我对如何将检查器添加到 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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以让您的连接将 application_name 设置为包含您想要的 id 的内容,然后配置您的日志记录以包含 application_name 字段。或者,您可以在 SQL 注释中包含 id,例如 select /* I am number 6 */ whatever from whereever。但是只有包含 sql 的日志消息才能看到 id。 (将注释放在select 关键字之后的原因是某些客户端会去掉前导的 cmets,因此服务端永远不会看到它们)

      【讨论】:

        猜你喜欢
        • 2011-11-19
        • 2021-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-26
        • 2012-04-06
        • 1970-01-01
        相关资源
        最近更新 更多