我需要将所有查询记录到我的项目中的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));
- }
- }
- .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”).就是这样
快乐登录!