使用java.util.logging与HyperSQL数据库引擎的JDBC驱动程序

5
在寻找关于java.util.logging包的问题答案在Java应用程序中实现日志记录在Swing应用程序中使用java.util.logging包后,我已经追踪到了问题,并想在这里分享我的解决方案。我将其发布为一个新问题,以便(希望)简明陈述实际问题(因为我之前提出的问题不太清楚,因为我问错了问题),并给出(希望)清晰的答案。

以下代码说明了问题:

package jdbcloggingsscce;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class JDBCLoggingSSCCE {
    public static void main(String[] args) throws IOException, SQLException {
        JDBCLoggingSSCCE.initLogger();
        Logger logger = Logger.getLogger(JDBCLoggingSSCCE.class.getName());
        logger.log(Level.INFO, "Starting JDBCLoggingSSCCE");

        Connection conn = DriverManager.getConnection(DB_URL);
        logger.log(Level.INFO, "JDBC Connection created");
    }

    private static void initLogger() throws IOException {
        Handler handler = new FileHandler(JDBCLoggingSSCCE.LOG_FILE_NAME);
        handler.setFormatter(new SimpleFormatter());

        Logger logger = Logger.getLogger("");
        logger.setLevel(Level.ALL);
        logger.addHandler(handler);
    }
    private static final String LOG_FILE_NAME = "jdbcloggingsscce.log";
    private static final String DB_URL = "jdbc:hsqldb:file:db/jdbcloggingsscce.db";
}

这个例子使用HyperSQL Database Engine (HSQLDB)的JDBC驱动程序。问题在于第一条日志信息(“Starting JDBCLoggingSSCCE”)已记录,但第二条信息(“JDBC Connection created”)未被记录。
1个回答

6
解决方案是设置一个名为“hsqldb.reconfig_logging”的系统属性为false。设置此属性的一种方法是在initLogger()方法的结尾添加以下代码行:
System.setProperty("hsqldb.reconfig_logging", "false");

我认为只要在调用DriverManager.getConnection(DB_URL)之前,放置位置并不完全关键。设置"hsqldb.reconfig_logging"属性会告诉HSQLDB JDBC驱动程序不要重新配置来自java.util.logging包的记录器。结果是应用程序中的日志记录将按预期继续进行。当然,HSQLDB也包括自己的日志记录消息,但处理这些消息需要另一个问答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接