You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin+Exposed项目中配置PostgreSQL驱动输出SQL日志

解决PostgreSQL JDBC + Exposed 控制台输出所有SQL的问题

代码配置Java Util Logging(无需外部配置文件)

PostgreSQL JDBC驱动通过org.postgresql命名空间的FINE级别日志输出所有执行的SQL,包括正常执行语句。以下代码可直接在应用启动时配置:

import java.util.logging.*

fun setupPgSqlDebugLogging() {
    // 定位PostgreSQL驱动的日志根节点
    val pgLogger = Logger.getLogger("org.postgresql")
    // 禁用父日志处理器的继承,防止重复输出
    pgLogger.useParentHandlers = false
    // 开启FINE级别日志,这是驱动输出SQL的最低级别
    pgLogger.level = Level.FINE

    // 创建控制台输出处理器
    val consoleHandler = ConsoleHandler().apply {
        level = Level.FINE
        // 使用简洁格式,便于调试查看
        formatter = object : SimpleFormatter() {
            override fun format(record: LogRecord): String {
                return "[PG-SQL] ${record.message}\n"
            }
        }
    }

    pgLogger.addHandler(consoleHandler)
}

配合Exposed框架的SQL日志(可选)

如果需要同时查看Exposed生成SQL的过程,可启用Exposed自带的控制台日志:

import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.transactions.transaction
import org.jetbrains.exposed.sql.StdOutSqlLogger
import org.jetbrains.exposed.sql.addLogger

// 初始化数据库连接
Database.connect(
    url = "jdbc:postgresql://localhost:5432/your_database",
    driver = "org.postgresql.Driver",
    user = "your_user",
    password = "your_password"
)

// 在事务中添加日志处理器(可全局配置或单事务配置)
transaction {
    addLogger(StdOutSqlLogger)
    // 执行你的数据库操作,比如:
    // User.selectAll().forEach { println(it[User.name]) }
}

关键说明

  • 仅需在应用启动时调用setupPgSqlDebugLogging()一次即可生效
  • 调试完成后,记得将日志级别改回Level.INFO或更高,避免生产环境输出冗余日志
  • 若项目已有JUL配置,需确保不会覆盖此配置的处理器和级别

内容的提问来源于stack exchange,提问作者Jordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:44:50