如何在Maven执行时将Liquibase操作的SQL语句输出到控制台?
解决Liquibase Maven插件执行时SQL语句同步输出到控制台的问题
我来帮你搞定这个问题,根据你的描述,分两种常见场景给你具体的解决方案:
场景1:直接通过Liquibase Maven插件执行变更集
如果你的Maven目标是让Liquibase直接跑变更集(不是先生成脚本再用sqlcmd执行),那最简单的方式就是调整Liquibase插件的配置,让它主动把执行的SQL打印到控制台:
在你的
pom.xml里找到Liquibase插件的配置块,添加showSql和合适的日志级别参数:<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>你的Liquibase版本号</version> <configuration> <!-- 这里保留你原有的url、username、password等配置 --> <showSql>true</showSql> <!-- 核心参数:开启SQL语句的控制台输出 --> <logLevel>INFO</logLevel> <!-- 可选:控制日志详细程度,DEBUG会输出更多细节 --> </configuration> </plugin>配置完之后,再执行
mvn run,Liquibase就会把要执行的SQL同步打印到控制台了。要是不想改pom,也可以用命令行临时开启:
mvn liquibase:update -Dliquibase.showSql=true -Dliquibase.logLevel=INFO
场景2:通过sqlcmd执行Liquibase生成的脚本文件
如果你的流程是先让Liquibase生成SQL脚本,再用sqlcmd -e执行并把输出写到日志文件,那要实现“同时输出到控制台+日志文件”,可以借助系统的重定向工具:
Linux/macOS环境
直接用tee命令,它会把命令输出同时发送到控制台和指定文件:
sqlcmd -S 你的SQLServer地址 -d 目标数据库 -U 用户名 -P 密码 -i 生成的脚本.sql -e | tee 你的日志文件.log
Windows环境
- 如果你用PowerShell,用
Tee-Object就能实现实时同步:sqlcmd -S 你的SQLServer地址 -d 目标数据库 -U 用户名 -P 密码 -i 生成的脚本.sql -e | Tee-Object -FilePath 你的日志文件.log - 要是用CMD的话,因为原生没有
tee,可以先写入日志再打印(虽然不是实时,但能达到效果):sqlcmd -S 你的SQLServer地址 -d 目标数据库 -U 用户名 -P 密码 -i 生成的脚本.sql -e > 你的日志文件.log 2>&1 && type 你的日志文件.log
额外小提示
如果Maven本身的日志过滤了Liquibase的输出,你可以用Maven的全局日志参数强制开启详细输出:
mvn clean install -X
不过-X会输出大量调试信息,可能有点杂乱,还是优先用Liquibase的showSql参数更精准。
内容的提问来源于stack exchange,提问作者sqlserverliqui
相关产品推荐
相关产品推荐

