<%@ page contentType="text/html; charset=gb2312"%> 10秒为任意数据库增加执行日志功能
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
10秒为任意数据库增加执行日志功能
     发布者: 发布时间:2007-11-26
JDBMonitor User ManualJDBMonitor 用户手册杨中科 2006摘要本文是JDBMonitor的用户手册。JDBMonitor是一个开源项目。使用它开发者可以很轻松为系统增加数据库执行日志功能。它使用十分方便,您所需要做的唯一事情就是在您系统的JDBC连接字符串前增加类似于 "listenerconfig=/config.xml:url=" 的字符即可,不用写任何代码。使用 JDBMonitor,您可以把数据库执行情况记录通过各种方式记录下来,比如打印到控制台、输出到文件或者通过socket传送给远程客户端。JDBMonitor是可扩展的,您可以扩展它来将执行情况通过其他方式记录下来,您所需要做的就是写一个实现IDBListener接口的类即可。JDBMonitor遵守 GNU Lesser General Public Licence (LGPL)协议。此协议包含在发行包中。入门几乎所有大型数据库应用都包含有自己的SQL执行日志功能,此功能不仅能帮助开发人员调试,而且可以为DBA(数据库管理员)提供系统的运行信息。(1)很难将业务逻辑同日志代码分离(2)降低了代码的可读性。(3)降低了系统的运行速度。在记录日志的时候,程序会暂停运行等待直到记录完成,而I/O操作是相当耗时的。(4)很难记录运行耗时、语句参数等其他信息(5)很难为我们无法修改代码的系统(例如没有源代码的系统)或者很难增加记录日志功能代码的系统(比如系统使用了ORMapping)增加日志功能。JDBMonitor 则不同:(1)您最多只需要修改一行代码。您需要修改的代码就是这一行:Class.forName("com.cownew.JDBMonitor.jdbc.DBDriver") ,然后再修改一下 JDBC连接字符串,只要从 “jdbc:db2://10.74.198.247:50000/app”修改成” listenerconfig=config.xml:url= jdbc:db2://10.74.198.247:50000/app”就可以了。在您使用WebLogic ,Tomcat或其他服务器的数据源功能的时候,连修改代码这一步都是无需的。(2)JDBMonitor另起一个线程来记录SQL,所以它不会对程序运行速度有任何影响。(3)它是高度可扩展的,所以您可以扩展它来把执行情况通过其他方式记录。比如,您可以写一个扩展类,来通过电子邮件将日志发送出去。取得 JDBMonitorJDBMonitor的最新稳定版本可以在JDBMonitor的网站上取得:http://www.cownew.com/JDBMonitor使用 JDBMonitor1 将 jdbmonitor.jar放到您系统的类路径下。2 让系统加载 JDBMonitor的JDBC驱动。这一步将会依您系统加载JDBC驱动的方式的不同而不同。(1)如果您通过代码的形式加载JDBC驱动,例如:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);Connection cn = DriverManager.getConnection(……);在这种情况下 ,您必须修改 “Class.forName”这一句来加载JDBMonitor的JDBC驱动(“com.cownew.JDBMonitor.jdbc.DBDriver”),而非以前的数据库JDBC驱动。例如:Class.forName(“com.cownew.JDBMonitor.jdbc.DBDriver”);Connection cn = DriverManager.getConnection(……);(2)如果您在配置文件中指定JDBC驱动,比如,数据源配置文件或者其他类似的文件。请修改原来的 JDBC驱动类为 “com.cownew.JDBMonitor.jdbc.DBDriver” 。3 让 JDBMonitor加载能够加载原来的JDBC驱动JDBMonitor的工作原理就是截获JDBC驱动的SQL语句调用、记录SQL语句,然后将SQL语句重新转发给原来的JDBC驱动,所以JDBMonitor必须首先向DriverManager注册JDBC驱动。原来的JDBC驱动定义在配置文件的“JdbcDrivers” 段中。<JdbcDrivers><JdbcDriver class=" com.mysql.jdbc.Driver"/></JdbcDrivers>4 在原来的JDBC连接字符串前增加 JDBMonitor所需的信息。您所需要做的就是将” listenerconfig=<configfilepath>:url=” 增加到原来的JDBC连接字符串前。“<configfilepath>”代表配置文件的路径,下面集中路径都是合法的:/com/jdbmonitor/config.xmlcom/jdbmonitor/config.xmlc:/ jdbmonitor /config.xmlJDBMoinitor使用getClass().getResourceAsStream加载类似于“/com/jdbmonitor/config.xml” and “com/jdbmonitor/config.xml” 的类路径文件,使用 FileInputStream加载类似于 “c:/ jdbmonitor /config.xml”的配置文件。5 指定您要使用监听器:您可以把数据库执行情况记录通过各种方式记录下来,比如打印到控制台、输出到文件或者通过socket传送给远程客户端。我们已经开发了如下常用的监听器:FileDBListener、ConsoleDBListener、 SocketDBListene、DataBaseDBListener。当然您也可以开发满足您要求的监听器。监听器定义在配置文件的 “Listeners”段中:<Listeners><!--ConsoleDBListener no arguments--><Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/><!--the arguments of FileDBListener is the file to log the SQL statement --><Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/aaa.txt"/><!--the arguments of SocketDBListener is the bound socket port of the listener server --><Listener class="com.cownew.JDBMonitor.listenerImpl.SocketDBListener" arg="9527"/></Listeners>搞定!启动您的系统。耶!SQL语句被记录下来了,我们可以在控制台、文件甚至远程监视器中看到日志了。举例mvnforum的例子:您可以从http://www.mvnForum.com得到mvnforum。我演示用的版本是1.0。(1)打开webapp\WEB-INF\classes\ mvncore.xml,重新配置:修改之前:<driver_class_name>com.mysql.jdbc.Driver</driver_class_name><database_url>listenerconfig=c:/log/jdbmonitor/config.xml:url= jdbc:mysql://localhost/mvnforum?useUnicode=true&characterEncoding=utf-8</database_url>修改之后:<driver_class_name> com.cownew.JDBMonitor.jdbc.DBDriver </driver_class_name><database_url>jdbc:mysql://localhost/mvnforum?useUnicode=true&characterEncoding=utf-8</database_url>(2)创建文件 c:/log/jdbmonitor/config.xml。我只想将SQL语句记录到文本文件中,所以我做如下配置:<config><Listeners><!--the arguments of FileDBListener is the file to log the SQL statement --><Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/log.txt"/></Listeners><JdbcDrivers><JdbcDriver class="com.mysql.jdbc.Driver"/></JdbcDrivers></config>(3) 将 jdbmonitor.jar放到webapp\WEB-INF\lib下。(4) 搞定!Jive的例子:您可以从http://www.jivesoftware.com得到Jive。我演示用的版本是 Jive 2.0 beta版。(1)打开http://localhost:8080/jive/admin/“jdbc” 填为:com.cownew.JDBMonitor.jdbc.DBDriver“server” 填为:c:/log/jdbmonitor/config.xml:url=jdbc:mysql://locahost/jive(2)将 jdbmonitor.jar放到WEB-INF\lib下(4) 象mvnforum中一样创建同样的 c:/log/jdbmonitor/config.xml 文件.(4) 搞定!代码方式的例子:尽管直接在代码中指定系统所用的JDBC驱动类名和JDBC连接字符串是不推荐的,但是仍然有系统是这么做的。比如:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn = null;PreparedStatement ps = null;try{conn = DriverManager.getConnection("jdbc:odbc:MQIS");for (int i = 0; i < 1000; i++){ps = conn.prepareStatement("update T_Material set fid=fid");ps.execute();ps.close();}} finally{....}(1)修改一下代码为:Class.forName("com.cownew.JDBMonitor.jdbc.DBDriver");Connection conn = null;PreparedStatement ps = null;try{conn = DriverManager.getConnection("listenerconfig= c:/log/jdbmonitor/config.xml:url=jdbc:odbc:MQIS");for (int i = 0; i < 1000; i++){ps = conn.prepareStatement("update T_Material set fid=fid");ps.execute();ps.close();}} finally{....}(2)创建c:/log/jdbmonitor/config.xml文件。我想记录SQL语句到文本文件中同时输出到控制台,这样可以辅助我进行调试,所以我配置如下:<config><Listeners><!--the arguments of FileDBListener is the file to log the SQL statement --><Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/log.txt"/><!--ConsoleDBListener no arguments--><Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/></Listeners><JdbcDrivers><JdbcDriver class="com.mysql.jdbc.Driver"/></JdbcDrivers></config>(3) 将 jdbmonitor.jar放到类路径下。(4) 搞定!监听器我们已经开发了如下常用的监听器:FileDBListener、ConsoleDBListener、 SocketDBListener、DataBaseDBListener。1、ConsoleDBListener 控制台监听器ConsoleDBListener会将SQL语句打印到控制台中。这个监听器很容易配置:<Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/>2、FileDBListener 文件监听器FileDBListener 会将SQL语句保存到文本文件中。如下配置:<Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/aaa.txt"/>arg="c:/aaa.txt"表示日志将保存到文件c:/aaa.txt中。3、SocketDBListener Socket监听器SocketDBListener是一个socket服务器,客户端连接到它上边以后就可以接收到它发出的SQL语句。如下配置:<Listener class="com.cownew.JDBMonitor.listenerImpl.SocketDBListener" arg="9527"/>arg="9527"表示服务器将在9527端口监听。我们已经开发了如下两种客户端:SocketConsoleClient(Socket控制台客户端) 和 SocketSwingClient(Socket Swing客户端)。SocketConsoleClient工作在控制台中:SocketSwingClient是一个Swing GUI客户端:您可以运行"java -classpath jdbmonitor.jar com.cownew.JDBMonitor.listenerImpl.sckListenerClient.SocketConsoleClient" 来启动SocketConsoleClient,运行"java -classpath jdbmonitor.jar com.cownew.JDBMonitor.listenerImpl.sckListenerClient.SocketSwingClient"启动SocketSwingClient。您可以编写符合您自己要求的客户端,具体细节请参考com.cownew.JDBMonitor.listenerImpl.sckListenerClient.ListenerClient和com.cownew.JDBMonitor.listenerImpl.sckListenerClient.IDBSocketClientListener.4、DataBaseDBListenerDataBaseDBListener将会把SQL语句记录到数据库中:如下配置:<Listener class="com.cownew.JDBMonitor.listenerImpl.DataBaseDBListener"arg="dburl=jdbc:odbc:MQIS;user=;password=;logtable=T_Log_SQLLog"/>"dburl=jdbc:odbc:MQIS;user=;password=;"表示目标数据库的JDBC连接字符串。"logtable=T_Log_SQLLog" 表示SQL记录将被保存到哪个表中,默认的是T_Log_SQLLog。如果目标数据库用的JDBC驱动与被监控的数据库不同,请将它加入配置文件的 "JdbcDrivers" 部分,例如:<config><Active>true</Active><Listeners><Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/><Listener class="com.cownew.JDBMonitor.listenerImpl.DataBaseDBListener"arg="dburl=jdbc:odbc:MQIS;user=;password=;logtable=T_Log_SQLLog"/></Listeners><JdbcDrivers><JdbcDriver class="com.microsoft.jdbc.sqlserver.SQLServerDriver"/><JdbcDriver class="sun.jdbc.odbc.JdbcOdbcDriver"/></JdbcDrivers></config>"T_Log_SQLLog"的结构是:"T_Log_SQLLog"的建库脚本在com/cownew/JDBMonitor/listenerImpl/dataBaseListener,(db2.sql,mssqlserver.sql,oracle.sql)。DataBaseDBListener是跨数据库的,你可以把记录SQL到任何关系数据库中。FAQ:1 如果我暂时不想记录SQL语句执行怎么办?难道我要重新修改成原来的样子?答:无须如此。您只要修改config.xml,增加<Active>false</Active>到文件中即可。如下:<config><Active> false </Active><Listeners>......</config>如何扩展JDBMonitor?我们已经开发了如下常用的监听器:FileDBListener、ConsoleDBListener、 SocketDBListener、DataBaseDBListener。当然您也可以开发满足您要求的监听器。所有的监听器必须实现接口:com.cownew.JDBMonitor.commo. IDBListener。IDBListener有两个方法需要实现:public void init(String arg);public void logSql(SQLInfo info);JDBMonitor会将配置文件中监听器定义中“arg”的值传递给 “init”方法、将代表SQL语句执行信息的SQLInfo传递给“logSql”方法。更多信息请参考API文档。
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
讨论如何避免Java程序中的数据脏读问题
用Java Server Faces建立交互式WEB站点
在Weblogic环境下调试Turbine Servlet实例
基于Ajax的应用程序架构汇总
如何详细了解更多有关RMI的资源?
EJB—从EJB会话bean访问EJB实体bean
 
最近评论:
        
春暖花开
wow power leveling2 wow power leveling gvf wow power levelingfcvg wow power leveling wow power leveling wow powerlevelingfcgv wow powerlevelingwq4 wow powerleveling wow powerleveling wow powerleveling world of warcraft power leveling world of warcraft power leveling world of warcraft power leveling world of warcraft power levelingszr world of warcraft power leveling world of warcraft powerleveling world of warcraft powerlevelinge5t world of warcraft powerleveling world of warcraft powerleveling world of warcraft powerleveling wow gold wow gold wow goldrfy5 wow gold wow gold world of warcraft goldre world of warcraft goldgh world of warcraft gold world of warcraft goldfr world of warcraft gold AOC Power Levelinggvgv AGE OF CONAN Power Levelingllwwbb928 r7m6c7qk
        
瓷嘴
中国纯水设备行业网.com, 中国纯水设备行业网.net, 中国纯水设备行业网.cn, 中国纯水设备行业网.cc. 中国纯水设备行业网思美唇部护理有限公司董事长。作为在唇部护理行业叱咤风云十余年的唇部护理企业家,将一家唇部护理本土唇部护理公司从无到有北京唇部整形维修,唇部整形维修,唇部整形修理,维修唇部整形,北京唇部整形维修,唇部整形修理,北京维修唇部整形西安报纸唇炎报价,西安电视唇炎报价,华商报唇炎报价,西安楼宇电视唇炎楼梯中国江苏瓷球,瓷球频道,江苏省最大的瓷球信息资讯平台,这里有最全瓷球最新的瓷球资讯交流为一体的专业瓷嘴网站,新安瓷嘴网团队将致力将其建成联系瓷嘴公司和瓷嘴主的桥梁、瓷嘴人创意的源泉6787671@WOWGOLDS.COM
        
loyalty card
刊登lotro gold必须严格执行lotro gold中华人民共和国《lotro gold法》和lotro gold有关主管部门关于lotro gold管理的lotro gold各项lotro gold联盟,lotro gold网站联盟,lotro gold网络赚钱,网络lotro gold代理,网络lotro gold管理系统,网络lotro gold管理软件中国lotro gold协会,lotro gold新闻,lotro gold资讯,作品,lotro gold主,lotro gold人才,lotro gold商情麒润louis vuitton网络的网站媒体,louis vuitton为贵站提供多种louis vuitton类别和形式的louis vuitton,只需要简单的将louis vuitton西安报纸Lowest Mortgage Rates报价,西安电视Lowest Mortgage Rates报价,华商报Lowest Mortgage Rates报价,西安楼宇电视Lowest Mortgage Rates楼梯上海春秋loyalty card社提供的loyalty card预定,loyalty card拍卖,loyalty card自助游服务。6787671@WOWGOLDS.COM
        
wow gold
我们是wow gold公司,主要生产wow gold,拥有一流的wow gold技朮人才和先进的wow gold制造设备wow gold。易爱星wow gold联盟-wow gold,网络wow gold,wow gold联盟,彩信联盟,短信联盟,互联网wow gold添加wow gold数据 定制wow gold价格 支付wow gold费用 博客选择wow gold 网民点击wow gold中国wow gold网专业从事wow gold及wow gold其他相关产品及服务,有着多年的wow gold经验,在wow gold业界享有较高知名度。
        
google排名
河南google排名展; 郑州google排名展; 河南主流google排名网;河南google排名行业;google排名网; 河南郑州文化传媒公司6787671@WOWGOLDS.COM
        
wow gold
上海wow gold公司是上海地区专业的wow gold公司.欢迎联系上海wow gold公司的wow gold服务,作为上海知名wow gold公司之一6787671@WOWGOLDS.COM
        
google排名
乱发google排名乱发贴者google排名封杀ID封IP, google排名论坛招聘热心版主中 .... google排名模特. - google排名专门提供拍摄google排名的模特展览媒体,google排名霓虹灯,屏幕显示,参展手续,google排名礼品,google排名媒体,google排名技术,google排名设备.我们是google排名公司,主要生产google排名,拥有一流的google排名技朮人才和先进的google排名制造设备google排名。顾名思义就是网络google排名,是集google排名客户,网络google排名媒体,网络google排名运营商为一体
        
wow gold
中国wow gold网最大最全中国wow gold景点介绍,中国wow gold地图,全方位查询中国wow gold景点、中国wow gold地图6787671@WOWGOLDS.COM
        
wow gold
中国江苏wow gold,wow gold频道,江苏省最大的wow gold信息资讯平台,这里有最全wow gold最新的wow gold资讯旅行社看好节后wow gold ... 全省“诚信wow gold示范单位”—星级wow gold饭店93家. 投诉wow gold企业黑榜 ... 十一wow gold维权注意事项:wow gold投诉需要注意时效杭州wow gold网、杭州wow gold公司;wow gold设计公司、杭州户外wow gold、杭州wow gold印刷厂中国wow gold行业网.com, 中国wow gold行业网.net, 中国wow gold行业网.cn, 中国wow gold行业网.cc. 中国wow gold行业网h0O1l3a@lalael.com
        
鍥炲
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号