有没有办法让 hsqldb 日志记录保持沉默?

问题描述 投票:0回答:5

我的项目中设置了嵌入式 Hsqldb。但它在工作时会转储输出上的大量信息,而我目前不需要这些信息:

Mar 29, 2012 10:18:11 PM org.hsqldb.persist.Logger logInfoEvent
INFO: Checkpoint start
Mar 29, 2012 10:18:11 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose start
Mar 29, 2012 10:18:11 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose end
Mar 29, 2012 10:18:11 PM org.hsqldb.persist.Logger logInfoEvent
INFO: Checkpoint end

有没有办法让输出静音?

java hsqldb
5个回答
7
投票

不幸的是,我不这么认为。 我们的项目也有同样的问题。 我相信我在某个时间检查了源代码并得出结论 hsqldb 没有提供一种影响此日志记录的方法。

我纠正了(正如 @fredt 在他对另一个答案的评论中提到的那样),您可以通过 jdk 日志级别控制此日志记录。 将“hsqldb.db”日志级别设置为

WARNING
之类的值将抑制此输出。 您可以使用logging.properties文件或以编程方式(在hsqldb加载后)使用诸如
Logger.getLogger("hsqldb.db").setLevel(Level.WARNING)
之类的东西来完成此操作(假设您正在使用java utillogging)。

正如下面评论中所述,hsqldb 还会重置 java 日志记录配置。 如果将其嵌入到另一个应用程序中,您可能需要通过将系统属性“hsqldb.reconfig_logging”设置为“false”( hsqldb 加载之前)来禁用该功能。


1
投票

对于任何寻求命令行解决方案的人。

使用指向专用属性文件位置的属性启动您的应用程序/服务器:

-Djava.util.logging.config.file=/location/of/your/hsqldblog.properties"

其中包含以下行来更改 Hsqldb 的 Java 日志记录。

# Change hsqldb logging level 
org.hsqldb.persist = WARNING

旁注,您可以从以下级别中进行选择:

严重警告信息配置精细更精细

有关 Java 日志记录的更多信息


1
投票

对于 Slf4j + Logback 用户:

添加

log4j-over-slf4j
作为依赖项(如果有,请不要忘记排除原始
log4j
依赖项)。如果您使用 Gradle,请将类似的内容添加到您的
build.gradle
:

runtime group: 'org.slf4j', name: 'log4j-over-slf4j', version: '1.7.25'

然后,将其添加到您的

logback.xml

<logger name="hsqldb.db" level="warn"/>

0
投票

从代码启动服务器时可以使用

setSilent(true)

Server server = new Server();
server.setSilent(true);
server.setDatabaseName(0, "mainDb");
server.setDatabasePath(0, "mem:mainDb");
server.setPort(9001);
server.start();

0
投票

setSilent(true) 仍然不会消除启动时的所有日志记录。 在测试环境中尝试这个。

server.setLogWriter(new PrintWriter(new OutputStream() {
        
        @Override
        public void write(int b) throws IOException {
    
            
        }
    }));
© www.soinside.com 2019 - 2024. All rights reserved.