在搜索了我的问题Implementing logging in a Java application和Using the java.util.logging package in a Swing application关于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”)不是。
答案 0 :(得分:5)
解决方案是将名为“hsqldb.reconfig_logging”的系统属性设置为false。设置此属性的一种方法是将以下代码行添加到initLogger()
方法的末尾:
System.setProperty("hsqldb.reconfig_logging", "false");
我认为只要在调用DriverManager.getConnection(DB_URL)
之前,展示位置并不完全重要。设置此“hsqldb.reconfig_logging”属性会告诉HSQLDB JDBC驱动程序不重新配置java.util.logging包中的Loggers。结果是根据需要继续登录应用程序的其余部分。当然,HSQLDB本身也包括记录消息,但处理这些消息是针对另一个Q& A。