Aktivieren Sie die Protokollierung für 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
Kommentar zu dem Problem
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 'log-Ausgabe, müssen Sie die debug-JAR-Dateien, welche angegeben sind mit "_g" in die Datei, name, ' Kommentarautor: Konstantin V. Salikhov
@KonstantinV.Salikhov, Jetzt habe ich versucht, mit Hilfe von ojdbc6_g.jar im classpath, aber immer dieselbe Fehlermeldung, ich habe aktualisiert mein Frage mit den Fehlerdetails. Kommentarautor: user3181365
die mbean registriert ist, mit einem anderen Namen, versuchen Sie es mit jconsole und sehen Sie die mbean-Namen und den richtigen Namen. Kommentarautor: Sajan Chandran
@SajanChandran habe ich das 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? Kommentarautor: user3181365
Haben Sie gesehen, diese Frage, und speziell die code, der mit ihm geht? Kommentarautor: mindas

InformationsquelleAutor der Frage user3181365 | 2014-11-21

Schreibe einen Kommentar