如何启动JDBC Debug模式,打印JDBC诊断日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1.下载Debug版本jar包      首先要下载一个Debug版本的JDBC jar包,Debug版本的jar包命名形式为jdbcX_g.jar(如下图所示),如Oracle11g的Debug版本的jar包为jdbc6_g.jar。点击这里下载:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112
1.下载Debug版本jar包
     首先要下载一个Debug版本的JDBC jar包,Debug版本的jar包命名形式为jdbcX_g.jar(如下图所示),如Oracle11g的Debug版本的jar包为jdbc6_g.jar。点击这里下载: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html 

2.启动Logging模式
     第一种方式:设置运行环境变量 java -Doracle.jdbc.Trace=true ...(elipse中run->run configurations->arguments一栏)
     第二种方式:在程序中控制(建议采用这种方式)
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
			String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");
			ObjectName pattern = new ObjectName("com.oracle.jdbc:type=diagnosability,name=" + loader);
			ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];
			mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));
			System.out.println("LoggingEnabled = " + mbs.getAttribute(diag, "LoggingEnabled"));
			
     如果用的是Oracle 10g,直接执行:
/**oracle 10g 启动方法*/
			oracle.jdbc.driver.OracleLog.setTrace(true); // enable logging
			oracle.jdbc.driver.OracleLog.setTrace(false); // disable logging
3.配置log文件
jdbc使用的是 java.util.logging包中的Logger对象打印log。
	/**配置log文件*/
			Handler fh = new FileHandler("./oracle_jdbc_log.log");
			fh.setLevel(Level.ALL);
			fh.setFormatter(new SimpleFormatter());
			Logger.getLogger("").addHandler(fh);
			Logger.getLogger("").setLevel(Level.ALL);
4.下面给大家一个完成的Demo
import javax.management.Attribute;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
public void run() throws SQLException {
		DriverManager.registerDriver(new OracleDriver());
		//需在加载OracleDriver之后开启log
		enableOracleLogging();
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;
		try {
			conn = getConnection();
			System.out.println("Connection retrieved..");
			stmt = conn.createStatement();
			rset = stmt.executeQuery("select empno from emp");
			while (rset.next()) {
				System.out.println(rset.getInt(1));
			}
		} catch (SQLException sqle) {
			sqle.printStackTrace();
		} finally {
			if (rset != null) {
				rset.close();
			}
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}
		}
	}
public static void enableOracleLogging() {
		try {
			/** 配置log文件 */
			Handler fh = new FileHandler("./oracle_jdbc_log.log");
			fh.setLevel(Level.ALL);
			fh.setFormatter(new SimpleFormatter());
			Logger.getLogger("").addHandler(fh);
			Logger.getLogger("").setLevel(Level.ALL);
			/** oracle 11g 启动方法 */
			MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
			String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");
			ObjectName pattern = new ObjectName("com.oracle.jdbc:type=diagnosability,name=" + loader);
			ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];
			mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));
			System.out.println("LoggingEnabled = " + mbs.getAttribute(diag, "LoggingEnabled"));
			/** oracle 10g 启动方法 */
			// oracle.jdbc.driver.OracleLog.setTrace(true); // enable logging
			// oracle.jdbc.driver.OracleLog.setTrace(false); // disable logging

		} catch (Exception e) {
			e.printStackTrace();
		}
	}


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
12026 107
|
3月前
|
运维 监控 安全
系统日志规范问题之日志打印等级的DEBUG的定义如何解决
系统日志规范问题之日志打印等级的DEBUG的定义如何解决
|
3月前
|
网络安全
【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024-03-26 实验结果失败]
【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024-03-26 实验结果失败]
|
3月前
|
XML 数据格式 Windows
【Azure 云服务】Azure Cloud Service (Extended Support) 云服务开启诊断日志插件 WAD Extension (Windows Azure Diagnostic) 无法正常工作的原因
【Azure 云服务】Azure Cloud Service (Extended Support) 云服务开启诊断日志插件 WAD Extension (Windows Azure Diagnostic) 无法正常工作的原因
|
4月前
|
监控 前端开发 安全
系统日志使用问题之DEBUG级别的日志主要用于什么阶段
系统日志使用问题之DEBUG级别的日志主要用于什么阶段
|
3月前
|
存储 容器
【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
|
3月前
|
Java C++
【Azure Function】开启Azure Function输出详细Debug日志 ( --verbose)
【Azure Function】开启Azure Function输出详细Debug日志 ( --verbose)
|
4月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL 运维 关系型数据库
|
5月前
|
关系型数据库 数据库