如何在控制台中禁用HSQLDB Server日志?
解决HSQL Server日志抑制问题
嘿,我懂你现在的困扰——已经搞定了Hibernate的日志输出,可HSQL Server的那些启动日志还在控制台刷屏对吧?别担心,这是因为HSQL的日志体系和Hibernate是完全分开的,你之前只针对org.hibernate的Logger设置了级别,自然管不到HSQL的日志。下面给你几个实用的解决方法:
方法一:通过Java代码直接设置
你可以在程序初始化阶段,针对HSQL对应的Logger单独设置日志级别。你看到的那些[Server@xxx]开头的日志,是来自org.hsqldb.server.Server这个类的Logger,直接对它调整级别就能精准抑制:
import java.util.logging.Level; import java.util.logging.Logger; // 只保留HSQL Server的严重错误日志,屏蔽普通启动信息 Logger.getLogger("org.hsqldb.server.Server").setLevel(Level.SEVERE); // 如果想同时覆盖HSQL所有模块的日志,也可以设置根包级别 // Logger.getLogger("org.hsqldb").setLevel(Level.WARNING);
方法二:使用logging.properties配置文件
要是不想改代码,或者希望配置更持久,可以用Java原生的logging.properties文件来统一管理。在你的项目资源目录(比如src/main/resources)下创建这个文件,添加以下内容:
# 针对HSQL Server类设置日志级别 org.hsqldb.server.Server.level = SEVERE # 或者全局设置HSQL所有日志的级别 # org.hsqldb.level = WARNING
之后在程序启动时,通过VM参数指定加载这个配置:-Djava.util.logging.config.file=src/main/resources/logging.properties(路径根据你的项目结构调整即可)。
方法三:如果使用SLF4J/Logback等日志框架
如果你的项目用了SLF4J搭配Logback这类更灵活的日志框架,直接在logback.xml(或对应配置文件)里添加Logger配置就行:
<configuration> <!-- 其他日志配置... --> <!-- 抑制HSQL Server日志,仅保留错误信息 --> <logger name="org.hsqldb.server.Server" level="ERROR" additivity="false"> <appender-ref ref="CONSOLE"/> </logger> <!-- 或者全局设置HSQL所有日志级别 --> <!-- <logger name="org.hsqldb" level="WARN" additivity="false"/> --> </configuration>
为啥之前的方法没用?
简单来说,Java的日志系统是按命名空间划分的,org.hibernate和org.hsqldb是两个完全独立的Logger命名空间,你设置其中一个的级别不会影响另一个,所以必须单独针对HSQL的Logger进行配置。
内容的提问来源于stack exchange,提问作者Muldy
相关产品推荐
相关产品推荐

