5

私の質問に対する答えを検索した後、Javaアプリケーションでのロギングの実装とJava.util.loggingパッケージに関する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データベースエンジン(HSQLDB)用のJDBCドライバーを使用しています。問題は、最初のログメッセージ( "Starting JDBCLoggingSSCCE")がログに記録されますが、2番目のメッセージ( "JDBC接続が作成されました")はログに記録されないことです。

4

1 に答える 1

6

解決策は、「hsqldb.reconfig_logging」というシステムプロパティをfalseに設定することです。このプロパティを設定する1つの方法は、initLogger()メソッドの最後に次のコード行を追加することです。

System.setProperty("hsqldb.reconfig_logging", "false");

への呼び出しの前である限り、配置は完全に重要ではないと思いますDriverManager.getConnection(DB_URL)。この「hsqldb.reconfig_logging」プロパティを設定すると、HSQLDB JDBCドライバーは、java.util.loggingパッケージからロガーを再構成しないように指示されます。その結果、アプリケーションの残りの部分へのログインが必要に応じて続行されます。もちろん、HSQLDBにはロギングメッセージ自体も含まれていますが、それらの処理は別のQ&A用です。

于 2012-09-10T14:39:57.673 に答える