Aktivieren der Protokollierung für SQL-Anweisungen bei der Verwendung von JDBC

Ich versuche zu aktivieren, meldet mit meinem JDBC-Programm, indem Sie die Verbindung zu Oracle-Datenbank in eclipse IDE.

Ich Durchlaufen haben, SO schreiben Sie JDBC-Protokollierung in Datei
dann erstellt habe ich unter java-Programm und es läuft aus meiner eclipse-IDE, aber ich war nicht in der Lage, um zu sehen, alle erzeugten Protokolle der JDBC-Treiber-Klassen.

import java.io.File;
import java.io.FileInputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.logging.LogManager;
import java.util.logging.Logger;

public class Logging {

    static Logger log = Logger.getLogger(Logging.class.toString());
    static Connection con = null;

    public static void main(String[] args) throws SQLException,
            ClassNotFoundException {
        System.setProperty("oracle.jdbc.Trace", Boolean.TRUE.toString());
        System.setProperty("java.util.logging.config.file",
                "OracleLog.properties");
        log.info("Test Message");
        enableLogging(false);
        getConnection();
        closeConnection();
    }

    static private void enableLogging(boolean logDriver) {
        try {
            oracle.jdbc.driver.OracleLog.setTrace(true);

            //compute the ObjectName
            String loader = Thread.currentThread().getContextClassLoader()
                    .toString().replaceAll("[,=:\"]+", "");
            javax.management.ObjectName name = new javax.management.ObjectName(
                    "com.oracle.jdbc:type=diagnosability,name=" + loader);

            //get the MBean server
            javax.management.MBeanServer mbs = java.lang.management.ManagementFactory
                    .getPlatformMBeanServer();

            //find out if logging is enabled or not
            System.out.println("LoggingEnabled = "
                    + mbs.getAttribute(name, "LoggingEnabled"));

            //enable logging
            mbs.setAttribute(name, new javax.management.Attribute(
                    "LoggingEnabled", true));

            File propFile = new File("path/to/properties");
            LogManager logManager = LogManager.getLogManager();
            logManager.readConfiguration(new FileInputStream(propFile));

            if (logDriver) {
                DriverManager.setLogWriter(new PrintWriter(System.err));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException,
            ClassNotFoundException {
        Properties connectionProps = new Properties();
        connectionProps.put("user", "test_app");
        connectionProps.put("password", "test");

        Class.forName("oracle.jdbc.driver.OracleDriver");
        con = DriverManager.getConnection(
                "jdbc:oracle:thin:@"+HOST_IP+":1521:"+SID,
                connectionProps);
        System.out.println("Connected to database");
        return con;
    }

    public static void closeConnection() throws SQLException {
        if (con != null) {
            con.close();
        }
    }

}

und ich haben folgenden Inhalt in meinem OracleLog.Eigenschaften Datei:

.level=SEVERE
oracle.jdbc.level=INFO
oracle.jdbc.handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=INFO
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

Aber wenn ich mein Programm durch die Platzierung ojdbc6-11.2.0.3.jar im classpath, dann erhalte ich die exception:

INFO: Test Message
javax.management.InstanceNotFoundException: com.oracle.jdbc:type=diagnosability,name=sun.misc.Launcher$AppClassLoader@73d16e93
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)
    at myjdbc.Logging.enableLogging(Logging.java:45)
    at myjdbc.Logging.main(Logging.java:24)
Connected to database

Wenn ich ojdbc6_g.jar im classpath, dann bin ich auch immer dieselbe Ausnahme.

Bitte lassen Sie mich wissen, wie kann ich aktivieren Sie die Protokollierung für meinen JDBC-Programm? grundsätzlich bin ich zu sehen erwartet die erzeugten Protokolle, die von der internen JDBC-code.

Update:
Nun legte ich ojdbc6dms.jar - Datei im classpath, mein Programm gibt die unten Ausnahme:

Nov 28, 2014 9:09:02 PM jdbc.chap2.Logging main
INFO: Test Message
javax.management.InstanceNotFoundException: com.oracle.jdbc:type=diagnosability,name=sun.misc.Launcher$AppClassLoader@73d16e93
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)
    at jdbc.chap2.Logging.enableLogging(Logging.java:45)
    at jdbc.chap2.Logging.main(Logging.java:24)
Exception in thread "main" java.lang.NoClassDefFoundError: oracle/dms/console/DMSConsole
    at oracle.jdbc.driver.DMSFactory.<clinit>(DMSFactory.java:48)
    at oracle.jdbc.driver.PhysicalConnection.createDMSSensors(PhysicalConnection.java:2121)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:730)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:433)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:608)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at jdbc.chap2.Logging.getConnection(Logging.java:70)
    at jdbc.chap2.Logging.main(Logging.java:25)
Caused by: java.lang.ClassNotFoundException: oracle.dms.console.DMSConsole
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 10 more
  • Haben Sie die richtigen Treiber im classpath? 'Sicherzustellen, dass die debug-JAR-Datei, sagen ojdbc5_g.jar oder ojdbc6_g.jar ist das nur Oracle-JDBC-JAR-Datei in die CLASSPATH-environment-variable.' und 'To get log Ausgabe verwenden, müssen Sie die debug-JAR-Dateien, welche angegeben sind mit "_g" in die Datei, name, '
  • Jetzt habe ich versucht, mit ojdbc6_g.jar im classpath, aber immer dieselbe Fehlermeldung, ich habe aktualisiert mein Frage mit den Fehlerdetails.
  • die mbean registriert ist, mit einem anderen Namen, versuchen Sie es mit jconsole und sehen Sie die mbean-Namen und den richtigen Namen.
  • Ich habe dieses Programm in eclipse und es läuft als eigenständiges Programm. Ich bin neu in Jconsole, ich habe den Befehl ausführen auf meine Eingabeaufforderung, können Sie mir bitte sagen, wie komme ich an die mbean-name?
  • Haben Sie gesehen, diese Frage, und speziell die code, der mit ihm geht?
  • ja ich habe auch gesagt, ich bin nach dem gleichen posten und den code, den ich verwende, ist der gleiche code, der gepostet wird, in Frage.
  • Hast du den DEV-Paket für Ihre Oracle-Treiber? Es scheint Ihnen fehlen die notwendigen Klassen anmelden, die Anfragen aus der Treiber.
  • Vielen Dank für die Beantwortung, ich habe die Jar-Datei bereits in meiner Frage im classpath, bitte lassen Sie mich wissen, wie das DEV-Paket?
  • Die Treiber sind hier und Sie brauchen das "dms" ersetzt.
  • Ich bin immer dieselbe Ausnahme, ich bin nicht in der Lage, es zu bekommen, wie kann ich das beheben das InstanceNotFoundException . Auch dieses mal bin ich immer noch eine Ausnahme für ClassNotFoundException: oracle.dms.console.DMSConsole ich habe versucht im internet, um die dms.jar Datei, aber ich bin nicht in der Lage, es zu finden. Ich Angaben in der update-Sektion für meine Frage. Können Sie mir bitte sagen, wie ich das beheben kann?

InformationsquelleAutor learner | 2014-11-21
Schreibe einen Kommentar