1

oraclejdbcドライバーとoracleucp(ユニバーサル接続プール)ライブラリによってログに記録されたjava.util.loggingメッセージをリダイレクトしようとしていますが、リダイレクトできません。

  1. JULを使用してアプリケーションによってログに記録されたメッセージはログに記録されますが、oracleライブラリによってログに記録されたメッセージはログに記録されません。
  2. ここでの私の意図は、JULメッセージをLogbackにリダイレクトして、構成を通じてよりきめ細かいロギングを行うことです。つまり、JUL構成(java.util.configファイル)では不可能だと思うパッケージレベルではなく、クラスレベルでログを有効にすることができます。

以下はサンプルテストコードです。上記の2点について何か提案はありますか?


import oracle.ucp.jdbc.PoolDataSourceImpl;
import org.slf4j.bridge.SLF4JBridgeHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import java.util.logging.Logger;

public class JavaUtilToSlf4jApp {
    private static Logger logger = Logger.getLogger(JavaUtilToSlf4jApp.class.getName());

    public static void main(String[] args) {
        SLF4JBridgeHandler.install();

        startConnectionPool();

        logger.info("Info Message");
    }

    private static void startConnectionPool() {
        PoolDataSourceImpl pds = new PoolDataSourceImpl();
        try {
            pds.setConnectionPoolName("Pool Name");
            pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
            pds.setConnectionFactoryProperties(getOracleDataSourceProperties());
            pds.setDataSourceName("Datasource Name");
            pds.setServerName("machine-name");
            pds.setPortNumber(1521);

            pds.setMinPoolSize(1);
            pds.setMaxPoolSize(1);

            pds.setMaxIdleTime(1800);
            pds.setValidateConnectionOnBorrow(true);

            pds.setUser("user");
            pds.setPassword("password");

            pds.startPool();
        } catch (SQLException e) {
            throw new RuntimeException("Cannot create project datasource ", e);
        }

        try {
            Connection connection = pds.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        logger.info("Connection established");
    }

    private static Properties getOracleDataSourceProperties() {
        Properties p = new Properties();
        p.put("driverType", "oci");
        p.put("networkProtocol", "tcp");
        p.put("serviceName", "servicename");
        return p;
    }

}


4

2 に答える 2

2

これは完全な混乱であり、ログを取得した後でも、うまく機能しませんでした。

まず、jar の「_g」バージョンを使用する必要があります。これは、デバッグ オプションを使用してコンパイルされ、ロギングがオンになっている jar です。このドライバーを使わないと、石から血が出るようなものになります。

次に、Java パラメータを追加する必要があります-Doracle.jdbc.Trace=true

3 番目に、ログ ファイル (logback.xml など) でパッケージを定義する必要があります。

  <logger name="oracle" level="INFO" additivity="false">
    <appender-ref ref="SERVER_FILE" />
  </logger>

これにより、次の結果が得られました。

11:17:45.393 [UCP-worker-thread-3] INFO  oracle.jdbc.driver - SQL: select count(*) from mytable
11:17:45.956 [main] INFO  oracle.jdbc.driver - SQL: 

        select myfield 
          from mytable 
         where myotherfield='myvalue'      

11:17:46.159 [main] INFO  oracle.jdbc.driver - SQL: begin :1 := dbms_pickler.get_type_shape(:2,:3,:4,:5,:6,:7); end;

問題を解決したかどうか、どのように解決したか、また、これが理にかなっている場合はお知らせください。この特定の問題については、ウェブ全体に貧弱で矛盾するコメントがあります。

于 2012-02-10T16:22:17.370 に答える