java – JDBC记录到文件
我需要将所有查询记录到我的项目中的Oracle数据库到一个日志文件.
实现这一点的好办法是什么?一些样品使用将不胜感激. 我已经看过SLF4J与jdbcdslog,但我不知道如何我可以登录到一个文件.此外,我需要“过滤”一些日志(因为我不需要知道什么时候getxxxx方法被调用) 最好,我更喜欢使用java.util.logging,但这不是必需的. 谢谢. **更新** 我发现this Oracle article,但是它并没有真正地告诉如何编程地做同样的事情. 解决方法
经过很多阅读,这就是我的工作方式:
注意:有关更多信息,请阅读Oracle Diagnosability in JDBC文档 Properties prop = new Properties(); prop.put ("user",USER); prop.put ("password",PASS); // prop.put(propname,propValue); Class.forName("oracle.jdbc.driver.OracleDriver"); enableLogging(false); conn = DriverManager.getConnection("jdbc:oracle:thin:@"+HOST+":"+PORT+":"+SID,prop); 这就是魔术: static private void enableLogging(boolean logDriver) throws MalformedObjectNameException,NullPointerException,AttributeNotFoundException,InstanceNotFoundException,MBeanException,ReflectionException,InvalidAttributeValueException,SecurityException,FileNotFoundException,IOException { 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)); } } 属性文件(从Oracle的文档): .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 基本上,这是处理程序被声明的地方 oracle.jdbc.handlers=java.util.logging.ConsoleHandler 声明ConsoleHandler由Oracle的JDBC驱动程序使用.任何和任何数量的处理程序可以在这里声明,每行一个,类的全限定名称: oracle.jdbc.handlers=java.util.logging.ConsoleHandler oracle.jdbc.handlers=java.util.logging.FileHandler ... 可以使用相同的规则来提供自己定制的处理程序.以下几行是设置处理程序 java.util.logging.ConsoleHandler.level=INFO 将调用ConsoleHandler处理程序实例的方法setLevel(Level.INFO). com.my.own.project.logging.handler.MyHandler.foo=Bar 将调用MyHandler处理程序实例的方法setFoo(“Bar”).就是这样 快乐登录! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 关于Linux上的getBounds()和setBounds()
- 使用javac命令编译Servlet,并将其放入tomcat中运
- .net – ExecutionContext带有哪些“当前”属性
- java – 在GlassFish 4.1中升级Jackson
- java.lang.NoClassDefFoundError:javax / mail
- Java泛型:如何包装/扩展Android Activity测试用
- 如何创建我在Java中创建的数据类型的副本?
- JavaFX删除工具栏和窗口顶部之间的分隔
- java – 为什么很多项目只提供源代码而不提供下载
- java – 正则表达式匹配对ebay网站的否定