mirror of
https://github.com/encounter/log4jdbc.git
synced 2026-03-30 11:27:21 -07:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 48cb541e58 | |||
| 201d3b974b | |||
| 007ff20ed1 | |||
| 2d8cbd4cdf | |||
| 21cbf688ec | |||
| 44043261af | |||
| 86364a24fa | |||
| 4900e751bb | |||
| 9da5241e39 | |||
| ddbee4d1b6 | |||
| 6bf61ef02b | |||
| 18c7e2fd19 | |||
| 339682f0c9 | |||
| b9ac53c3f3 | |||
| 1695b42ce1 | |||
| a072c4e953 | |||
| 567cefd156 |
+101
-14
@@ -1,29 +1,116 @@
|
||||
2007-07-25 1.1 alpha 2 Release
|
||||
2008-11-08 1.2 alpha 1 Release
|
||||
|
||||
o added a new logger "jdbc.connection" to dump connection open and
|
||||
close events as well as dumping all open connection numbers. This
|
||||
is very useful for hunting down connection leak problems.
|
||||
|
||||
o several new options to produce better SQL output:
|
||||
|
||||
log4jdbc.dump.booleanastruefalse - many RDBMS's don't have a
|
||||
native boolean type and store booleans as a 1 or 0. Setting this
|
||||
option to false will show boolean bind variables as 1 or 0.
|
||||
Setting this to true will show the boolean as true or false.
|
||||
(Note that the default for this setting is false, contrary to the
|
||||
previous way log4jdbc worked.)
|
||||
|
||||
log4jdbc.dump.sql.maxlinelength - can be used to insert line
|
||||
breaks into long running SQL (at white space positions.)
|
||||
previous versions of log4jdbc did this automatically with a value
|
||||
of 90 (the default value is 90.) This line breaking can be turned
|
||||
off completely by setting this to 0.
|
||||
|
||||
log4jdbc.dump.fulldebugstacktrace - can be used in extreme
|
||||
debugging circumstances when you want to be able to see the full
|
||||
stack trace in the debug output. Be extra careful when using
|
||||
this as it will obviously produce much much more logging output.
|
||||
|
||||
o dump a null bind variable as NULL instead of <null> for more
|
||||
accurate and reuseable SQL output.
|
||||
|
||||
o several new options for controlling what types of SQL statements are
|
||||
logged:
|
||||
|
||||
log4jdbc.dump.sql.select default value is true
|
||||
log4jdbc.dump.sql.insert default value is true
|
||||
log4jdbc.dump.sql.update default value is true
|
||||
log4jdbc.dump.sql.delete default value is true
|
||||
log4jdbc.dump.sql.create default value is true
|
||||
|
||||
The default values for all of these are true, but they can be
|
||||
selectively turned on and off to filter out unwanted types of sql
|
||||
statements. For example, setting log4jdbc.dump.sql.delete will
|
||||
cause all DELETE sql commands to not be logged.
|
||||
|
||||
o A new option to add a semi colon to the end of the dumped sql:
|
||||
|
||||
log4jdbc.dump.sql.addsemicolon default value is false
|
||||
|
||||
Sometimes it's useful to use log4jdbc to produce sql scripts that
|
||||
can later be fed back into a SQL tool to execute against a
|
||||
database and this option can help to produce more re-useable sql
|
||||
output script data from a log file.
|
||||
|
||||
o added Microsoft SQL Server 2005 Driver
|
||||
(com.microsoft.sqlserver.jdbc.SQLServerDriver) to
|
||||
list of "well known" drivers that log4jdbc looks for at startup.
|
||||
(thanks to Rob Richards for pointing this out)
|
||||
|
||||
Note that the SQL Server 2000 Driver with the confusing name
|
||||
of (com.microsoft.jdbc.sqlserver.SQLServerDriver) is also still
|
||||
supported.
|
||||
|
||||
o other miscellaneous improvements.
|
||||
|
||||
2008-04-11 1.1 Release
|
||||
|
||||
o upgrade to SLF4J 1.5. Note that log4jdbc should still work with
|
||||
any older (or newer) version of SLF4J too.
|
||||
|
||||
o slightly better fault tolerance for when loading/probing of
|
||||
popular JDBC drivers fails for any reason.
|
||||
|
||||
2007-11-10 1.1 beta 1 Release
|
||||
|
||||
o added HSQLDB (org.hsqldb.jdbcDriver) and H2 (org.h2.Driver) to
|
||||
list of "well known" drivers that log4jdbc looks for at startup.
|
||||
|
||||
o added log4jdbc.sqltiming.warn.threshold and
|
||||
log4jdbc.sqltiming.error.threshold system property settings to
|
||||
greatly aid in finding slow running sql. Special thanks to
|
||||
Lilianne E. Blaze for the idea and initial implementation.
|
||||
|
||||
2007-07-25 1.1 alpha 2 Release
|
||||
|
||||
o JDBC 4.0 support!
|
||||
|
||||
o fix Null pointer exception bug that could happen with setObject call on PreparedStatementSpy
|
||||
o fix Null pointer exception bug that could happen with setObject
|
||||
call on PreparedStatementSpy
|
||||
|
||||
o added MySQL (com.mysql.jdbc.Driver) and PostgreSQL (org.postgresql.Driver)
|
||||
to list of "well known" drivers that log4jdbc looks for at startup.
|
||||
o added MySQL (com.mysql.jdbc.Driver) and PostgreSQL
|
||||
(org.postgresql.Driver) to list of "well known" drivers that
|
||||
log4jdbc looks for at startup.
|
||||
|
||||
2007-05-29 1.1 alpha 1 Release
|
||||
|
||||
o Fixed problem where when sql timing log was the only log turned on, log4jdbc would not recognize that
|
||||
logging was on at all.
|
||||
o Fixed problem where when sql timing log was the only log turned
|
||||
on, log4jdbc would not recognize that logging was on at all.
|
||||
|
||||
o report sql exceptions in the sql timing log as well (when they occured during sql execution) and
|
||||
prominently show that the sql FAILED, and display how long it tried to chug on the sql
|
||||
before the exception was thrown
|
||||
o report sql exceptions in the sql timing log as well (when they
|
||||
occured during sql execution) and prominently show that the sql
|
||||
FAILED, and display how long it tried to chug on the sql before
|
||||
the exception was thrown.
|
||||
|
||||
o Switch to Simple Logging Facade for Java SLF4J instead of using log4j directly, so that any underlying
|
||||
logging system can be easily used.
|
||||
o Switch to Simple Logging Facade for Java SLF4J instead of using
|
||||
log4j directly, so that any underlying logging system can be
|
||||
easily used.
|
||||
|
||||
o option added to ant build script to generate javadoc with ydoc to include UML diagrams within the javadoc.
|
||||
o option added to ant build script to generate javadoc with ydoc
|
||||
to include UML diagrams within the javadoc.
|
||||
|
||||
o dump batched sql correctly.
|
||||
|
||||
o add simple command line program (PostLogProfilerProcessor) for processing sqltiming log files to create
|
||||
a simple profiling report from log data.
|
||||
o add simple command line program (PostLogProfilerProcessor) for
|
||||
processing sqltiming log files to create a simple profiling
|
||||
report from log data.
|
||||
|
||||
2007-04-21 Initial 1.0 Release
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
log4jdbc is open source software, released under the Apache License, Version 2.0:
|
||||
|
||||
Copyright 2007 Arthur Blake
|
||||
Copyright 2007-2008 Arthur Blake
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use log4jdbc except in compliance with the License.
|
||||
|
||||
@@ -16,3 +16,5 @@ o ALL String concatenation & dumping methods should take place ONLY if logging
|
||||
o review dumpedSql method - make auto line breaking option (& num chars used) be options
|
||||
|
||||
o need log4jdbc.debug.stack.regex so that the stack matching can take place via regex
|
||||
|
||||
o maven2 repository support
|
||||
|
||||
+415
-104
File diff suppressed because it is too large
Load Diff
@@ -30,6 +30,11 @@ log4j.additivity.jdbc.sqlonly=false
|
||||
log4j.logger.jdbc.sqltiming=DEBUG,sqltiming
|
||||
log4j.additivity.jdbc.sqltiming=false
|
||||
|
||||
! Log connection open/close events and connection number dump
|
||||
log4j.logger.jdbc.connection=FATAL,connection
|
||||
log4j.additivity.jdbc.connection=false
|
||||
|
||||
|
||||
! the appender used for the JDBC API layer call logging above, sql only
|
||||
log4j.appender.sql=org.apache.log4j.FileAppender
|
||||
log4j.appender.sql.File=./logs/sql.log
|
||||
@@ -50,3 +55,10 @@ log4j.appender.jdbc.File=./logs/jdbc.log
|
||||
log4j.appender.jdbc.Append=false
|
||||
log4j.appender.jdbc.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.jdbc.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
|
||||
|
||||
! the appender used for the JDBC Connection open and close events
|
||||
log4j.appender.connection=org.apache.log4j.FileAppender
|
||||
log4j.appender.connection.File=./logs/connection.log
|
||||
log4j.appender.connection.Append=false
|
||||
log4j.appender.connection.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.connection.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
|
||||
|
||||
+16
-3
@@ -37,15 +37,23 @@
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<appender name="jdbc-connection" class="org.apache.log4j.FileAppender">
|
||||
<param name="File" value="./logs/connection.log"/>
|
||||
<param name="Append" value="false"/>
|
||||
<layout class="org.apache.log4j.PatternLayout">
|
||||
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n"/>
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<!--
|
||||
The Following 4 logs can be turned on and off while the server is running
|
||||
The Following 5 logs can be turned on and off while the server is running
|
||||
LIVE in order to trace the SQL and/or all JDBC coming out of the application.
|
||||
|
||||
To turn a log on, set the level value to INFO or DEBUG (to see class name and
|
||||
line number information in the log) The DEBUG setting is much more inefficient
|
||||
but the output is much more useful.
|
||||
|
||||
To turn off JDBC logging completely, you must set all 4 logs to a level higher
|
||||
To turn off JDBC logging completely, you must set all 5 logs to a level higher
|
||||
than ERROR (FATAL is suggested.)
|
||||
-->
|
||||
|
||||
@@ -75,7 +83,12 @@
|
||||
<level value="fatal"/>
|
||||
<appender-ref ref="jdbc-appender"/>
|
||||
</logger>
|
||||
|
||||
|
||||
<!-- log connection open/close events and dump of all open connection numbers -->
|
||||
<logger name="jdbc.connection" additivity="false">
|
||||
<level value="fatal"/>
|
||||
<appender-ref ref="connection-appender"/>
|
||||
</logger>
|
||||
|
||||
<!-- this log is for internal debugging of log4jdbc, itself -->
|
||||
<!-- debug logging for log4jdbc itself -->
|
||||
|
||||
+7
-2
@@ -8,6 +8,7 @@
|
||||
.usage {text-align:left;}
|
||||
h1 {font-size:1em;color:#f06;background-color:#eee;display:block;padding:0.8em;}
|
||||
h2 {font-size:1.2em;color:#f06;background-color:#eee;display:block;height:2em;padding-top:0.8em;}
|
||||
h3 {font-size:1.1em;color:0;font-weight:bold;margin:5px;}
|
||||
a {text-decoration:none;}
|
||||
a:link {color: #f06;}
|
||||
a:visited {color: #f06;}
|
||||
@@ -25,6 +26,10 @@ code,pre {color:navy;background-color:beige;font-size:11pt;}
|
||||
|
||||
pre {border:2px dashed navy;margin-left:3em;margin-right:4em;margin-top:1em;margin-bottom:1em;white-space:pre-line;}
|
||||
|
||||
p.ad {font-size:1em;color:blue;}
|
||||
|
||||
.copyright {font-size:0.8m;text-align:center}
|
||||
.copyright a {color:#ef39e9}
|
||||
.sflogo {float:right; margin-right:30px;}
|
||||
|
||||
table.options {margin-left:40px;margin-right:20px;border:1px solid black;border-collapse:collapse;}
|
||||
table.options thead th {text-align:center;border:1px solid black; padding:5px}
|
||||
table.options tbody td {text-align:left;border:1px solid black; padding:5px}
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
To build log4jdbc, you must have Ant 1.6.5 or later installed,
|
||||
and JDK 1.4 and JDK 1.6 installed.
|
||||
|
||||
The build.cmd file is useful for building both the jdbc 3 version (JDK 1.4) and the jdbc 4 version (under JDK 1.6) under windows.
|
||||
+1
-1
@@ -11,7 +11,7 @@ call java -version
|
||||
|
||||
call ant -Djdbc.level=3 all
|
||||
|
||||
set JAVA_HOME=c:\jdk1.6.0
|
||||
set JAVA_HOME=C:\jdk1.6.0_10
|
||||
set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin
|
||||
call java -version
|
||||
|
||||
|
||||
+29
-16
@@ -1,23 +1,42 @@
|
||||
<?xml version='1.0' encoding='ISO-8859-1' ?>
|
||||
|
||||
<!--
|
||||
|
||||
Ant build script for log4jdbc
|
||||
|
||||
Tested with Apache Ant version 1.6.5 & 1.7
|
||||
|
||||
built with jdk 1.4.2_13 (for use with jdbc3)
|
||||
and/or jdk 1.6.0 (for use with jdbc4)
|
||||
|
||||
Copyright 2007-2008 Arthur Blake
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project name="log4jdbc" default="all" basedir="..">
|
||||
|
||||
<!-- the jdbc.level flag should be set externally to either 3 or 4
|
||||
|
||||
the is the jdbc version and should be 3 if using a jdk 1.4 (or 1.5) (1.4 is recommended for maximum compatibility)
|
||||
this is the jdbc version and should be 3 if using a jdk 1.4 or 1.5 (jdk 1.4 is recommended for maximum compatibility)
|
||||
|
||||
the jdbc.level flag should be set to 4 if using a jdk 1.6 or greater.
|
||||
|
||||
defaults to jdbc3 build if not set externally
|
||||
|
||||
therefore to build both, ant should be invoked twice, setting the jdbc.level externally
|
||||
to 3 and then 4. and using the jdk 1.4 and then 1.6.
|
||||
-->
|
||||
|
||||
<property name="jdbc.level" value="3" />
|
||||
@@ -29,23 +48,18 @@
|
||||
|
||||
|
||||
<!-- release version -->
|
||||
<property name="version" value="1.1alpha2"/>
|
||||
<property name="version" value="1.2alpha1"/>
|
||||
|
||||
<target name="all" depends="cleancompile,compile,cleanjar,jar"/>
|
||||
|
||||
<!--
|
||||
note that if jdbc.level is 3, a jdk 1.4 compiler should be used to build log4jdbc
|
||||
and if the jdbc.level is 4, a jdk 1.6 compiler should be used to build log4jdbc
|
||||
therefore to build both, ant should be invoked twice, setting the jdbc.level externally
|
||||
to 3 and then 4. and using the jdk 1.4 and then 1.6.
|
||||
|
||||
jdbc.level is explicitly set here to xxx so that the user is forced to set it externally.
|
||||
-->
|
||||
|
||||
<!-- ydoc.home.X is only used for the ydoc.X targets for producing javadoc with UML
|
||||
The ydoc.home.3 and ydoc.home.4 properties are only used for the ydoc.3
|
||||
and ydoc.4 targets for producing javadoc with UML
|
||||
|
||||
it requires the commercial ydoc utility (see http://www.yworks.com/en/products_ydoc.htm)
|
||||
(use the javadoc target to generate regular javadoc)
|
||||
it requires the commercial ydoc utility
|
||||
(see http://www.yworks.com/en/products_ydoc.htm)
|
||||
|
||||
use the javadoc target to generate regular javadoc
|
||||
|
||||
ydoc.home.3 is for jdk1.4 / JDBC 3
|
||||
ydoc.home.4 is for jdk1.6 / JDBC 4
|
||||
@@ -180,6 +194,7 @@
|
||||
<property name="ps" value="${path.separator}"/>
|
||||
|
||||
<javadoc destdir="${apidocs}" packagenames="net.sf.log4jdbc.*"
|
||||
maxmemory="512m"
|
||||
Windowtitle="log4${jdbc.prefix} ${version}"
|
||||
Header="<b><a href="http://log4jdbc.sourceforge.net">log4${jdbc.prefix} ${version}</a></b>"
|
||||
Use="true" breakiterator="true">
|
||||
@@ -194,7 +209,7 @@
|
||||
<!-- note that the jdk source code is referenced here so that javadoc will be generated from
|
||||
interface class methods when none is specified in the implementation -->
|
||||
|
||||
<sourcepath path="/jdk1.6.0/src"/>
|
||||
<sourcepath path="/jdk1.6.0_10/src"/>
|
||||
<link href="http://java.sun.com/javase/6/docs/api/"/>
|
||||
<!--
|
||||
<link href="http://java.sun.com/j2ee/1.4/docs/api/"/>
|
||||
@@ -220,6 +235,4 @@
|
||||
</doclet>
|
||||
</javadoc>
|
||||
</target>
|
||||
|
||||
|
||||
</project>
|
||||
|
||||
+2
-1
@@ -5,6 +5,7 @@ rem run ydoc for jdbc 3 with jdk 1.4 and
|
||||
rem run ydoc for jdbc 4 with jdk 1.6
|
||||
|
||||
set ANT_HOME=c:\apache-ant-1.6.5
|
||||
set ANT_OPTS=-Xmx512m
|
||||
|
||||
set JAVA_HOME=C:\j2sdk1.4.2_13
|
||||
set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin
|
||||
@@ -12,7 +13,7 @@ call java -version
|
||||
|
||||
call ant -Djdbc.level=3 ydoc.3
|
||||
|
||||
set JAVA_HOME=c:\jdk1.6.0
|
||||
set JAVA_HOME=c:\jdk1.6.0_10
|
||||
set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin
|
||||
call java -version
|
||||
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
|
||||
rem *************************************************************************************************
|
||||
rem * *
|
||||
rem * Copyright 2007 Arthur Blake *
|
||||
rem * Copyright 2007-2008 Arthur Blake *
|
||||
rem * *
|
||||
rem * Licensed under the Apache License, Version 2.0 (the "License"); *
|
||||
rem * you may not use this file except in compliance with the License. *
|
||||
@@ -25,4 +25,4 @@ rem * profiling output report.
|
||||
rem * *
|
||||
rem *************************************************************************************************
|
||||
|
||||
java -Xmx1024m -classpath ..\build\log4jdbc-1.1alpha1.jar net.sf.log4jdbc.PostLogProfilerProcessor %*
|
||||
java -Xmx1024m -classpath ..\build\log4jdbc3-1.2alpha1.jar net.sf.log4jdbc.PostLogProfilerProcessor %*
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
|
||||
# *************************************************************************************************
|
||||
# * *
|
||||
# * Copyright 2007 Arthur Blake *
|
||||
# * Copyright 2007-2008 Arthur Blake *
|
||||
# * *
|
||||
# * Licensed under the Apache License, Version 2.0 (the "License"); *
|
||||
# * you may not use this file except in compliance with the License. *
|
||||
@@ -25,4 +25,4 @@
|
||||
# * *
|
||||
# *************************************************************************************************
|
||||
|
||||
java -Xmx1024m -classpath ../build/log4jdbc-1.1alpha1.jar net.sf.log4jdbc.PostLogProfilerProcessor $@
|
||||
java -Xmx1024m -classpath ../build/log4jdbc3-1.2alpha1.jar net.sf.log4jdbc.PostLogProfilerProcessor $@
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/**
|
||||
*
|
||||
* Copyright 2007 Arthur Blake
|
||||
* Copyright 2007-2008 Arthur Blake
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -40,8 +39,6 @@ import java.util.Map;
|
||||
*/
|
||||
public class CallableStatementSpy extends PreparedStatementSpy implements CallableStatement
|
||||
{
|
||||
private final SpyLogDelegator log;
|
||||
|
||||
protected void reportAllReturns(String methodCall, String msg)
|
||||
{
|
||||
log.methodReturned(this, methodCall, msg);
|
||||
@@ -53,7 +50,7 @@ public class CallableStatementSpy extends PreparedStatementSpy implements Callab
|
||||
private CallableStatement realCallableStatement;
|
||||
|
||||
/**
|
||||
* Create a CallableStatementSpy to spy upon a CallableStatement.
|
||||
* Create a CallableStatementSpy (JDBC 3 version) to spy upon a CallableStatement.
|
||||
*
|
||||
* @param sql The SQL used for this CallableStatement
|
||||
* @param connectionSpy The ConnectionSpy which produced this CallableStatementSpy
|
||||
@@ -63,7 +60,6 @@ public class CallableStatementSpy extends PreparedStatementSpy implements Callab
|
||||
{
|
||||
super(sql, connectionSpy, realCallableStatement);
|
||||
this.realCallableStatement = realCallableStatement;
|
||||
log = SpyLogFactory.getSpyLogDelegator();
|
||||
}
|
||||
|
||||
public String getClassType()
|
||||
@@ -625,6 +621,7 @@ public class CallableStatementSpy extends PreparedStatementSpy implements Callab
|
||||
|
||||
public void setBytes(String parameterName, byte[] x) throws SQLException
|
||||
{
|
||||
//todo: dump byte array?
|
||||
String methodCall = "setBytes(" + parameterName + ", " + x + ")";
|
||||
try
|
||||
{
|
||||
@@ -1041,7 +1038,6 @@ public class CallableStatementSpy extends PreparedStatementSpy implements Callab
|
||||
reportException(methodCall, s);
|
||||
throw s;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void registerOutParameter(String parameterName, int sqlType, String typeName) throws SQLException
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright 2007 Arthur Blake
|
||||
* Copyright 2007-2008 Arthur Blake
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -23,10 +23,19 @@ import java.sql.SQLException;
|
||||
import java.sql.SQLWarning;
|
||||
import java.sql.Savepoint;
|
||||
import java.sql.Statement;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Wraps a JDBC Connection and reports method calls, returns and exceptions.
|
||||
*
|
||||
* This version is for jdbc 3.
|
||||
*
|
||||
* @author Arthur Blake
|
||||
*/
|
||||
public class ConnectionSpy implements Connection, Spy
|
||||
@@ -35,9 +44,51 @@ public class ConnectionSpy implements Connection, Spy
|
||||
|
||||
private SpyLogDelegator log;
|
||||
|
||||
private int connectionNumber;
|
||||
private final Integer connectionNumber;
|
||||
private static int lastConnectionNumber = 0;
|
||||
private static final Object connectionNumberLock = new Object();
|
||||
|
||||
/**
|
||||
* Contains a Mapping of connectionNumber to currently open ConnectionSpy
|
||||
* objects.
|
||||
*/
|
||||
private static final Map connectionTracker = new HashMap();
|
||||
|
||||
/**
|
||||
* Get a dump of how many connections are open, and which connection numbers
|
||||
* are open.
|
||||
*
|
||||
* @return an open connection dump.
|
||||
*/
|
||||
public static String getOpenConnectionsDump()
|
||||
{
|
||||
StringBuffer dump = new StringBuffer();
|
||||
int size;
|
||||
Integer[] keysArr;
|
||||
synchronized (connectionTracker)
|
||||
{
|
||||
size = connectionTracker.size();
|
||||
if (size==0)
|
||||
{
|
||||
return "open connections: none";
|
||||
}
|
||||
Set keys = connectionTracker.keySet();
|
||||
keysArr = (Integer[]) keys.toArray(new Integer[keys.size()]);
|
||||
}
|
||||
|
||||
Arrays.sort(keysArr);
|
||||
|
||||
dump.append("open connections: ");
|
||||
for (int i=0; i < keysArr.length; i++)
|
||||
{
|
||||
dump.append(keysArr[i]);
|
||||
dump.append(" ");
|
||||
}
|
||||
|
||||
dump.append("(");
|
||||
dump.append(size);
|
||||
dump.append(")");
|
||||
return dump.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new ConnectionSpy that wraps a given Connection.
|
||||
@@ -46,28 +97,21 @@ public class ConnectionSpy implements Connection, Spy
|
||||
*/
|
||||
public ConnectionSpy(Connection realConnection)
|
||||
{
|
||||
setRdbmsSpecifics(DriverSpy.defaultRdbmsSpecifics); // just in case it's not initialized
|
||||
if (realConnection == null)
|
||||
{
|
||||
throw new IllegalArgumentException("Must pass in a non null real Connection");
|
||||
}
|
||||
this.realConnection = realConnection;
|
||||
log = SpyLogFactory.getSpyLogDelegator();
|
||||
|
||||
synchronized (connectionNumberLock)
|
||||
{
|
||||
connectionNumber = ++lastConnectionNumber;
|
||||
}
|
||||
this(realConnection, DriverSpy.defaultRdbmsSpecifics);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new ConnectionSpy that wraps a given Connection.
|
||||
*
|
||||
* @param realConnection "real" Connection that this ConnectionSpy wraps.
|
||||
* @param rdbmsSpecifics the RdbmsSpecifics object for formatting logging appropriate for the Rdbms used.
|
||||
* @param rdbmsSpecifics the RdbmsSpecifics object for formatting logging appropriate for the Rdbms used.
|
||||
*/
|
||||
public ConnectionSpy(Connection realConnection, RdbmsSpecifics rdbmsSpecifics)
|
||||
{
|
||||
if (rdbmsSpecifics == null)
|
||||
{
|
||||
rdbmsSpecifics = DriverSpy.defaultRdbmsSpecifics;
|
||||
}
|
||||
setRdbmsSpecifics(rdbmsSpecifics);
|
||||
if (realConnection == null)
|
||||
{
|
||||
@@ -76,10 +120,13 @@ public class ConnectionSpy implements Connection, Spy
|
||||
this.realConnection = realConnection;
|
||||
log = SpyLogFactory.getSpyLogDelegator();
|
||||
|
||||
synchronized (connectionNumberLock)
|
||||
synchronized (connectionTracker)
|
||||
{
|
||||
connectionNumber = ++lastConnectionNumber;
|
||||
connectionNumber = new Integer(++lastConnectionNumber);
|
||||
connectionTracker.put(connectionNumber, this);
|
||||
}
|
||||
log.connectionOpened(this);
|
||||
reportReturn("new Connection");
|
||||
}
|
||||
|
||||
private RdbmsSpecifics rdbmsSpecifics;
|
||||
@@ -104,7 +151,7 @@ public class ConnectionSpy implements Connection, Spy
|
||||
return rdbmsSpecifics;
|
||||
}
|
||||
|
||||
public int getConnectionNumber()
|
||||
public Integer getConnectionNumber()
|
||||
{
|
||||
return connectionNumber;
|
||||
}
|
||||
@@ -685,6 +732,14 @@ public class ConnectionSpy implements Connection, Spy
|
||||
reportException(methodCall, s);
|
||||
throw s;
|
||||
}
|
||||
finally
|
||||
{
|
||||
synchronized (connectionTracker)
|
||||
{
|
||||
connectionTracker.remove(connectionNumber);
|
||||
}
|
||||
log.connectionClosed(this);
|
||||
}
|
||||
reportReturn(methodCall);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright 2007 Arthur Blake
|
||||
* Copyright 2007-2008 Arthur Blake
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright 2007 Arthur Blake
|
||||
* Copyright 2007-2008 Arthur Blake
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -27,7 +27,7 @@ import java.util.Arrays;
|
||||
* Name of log file is passed in on the command line as the only argument.
|
||||
*
|
||||
* Assumptions:
|
||||
*
|
||||
*
|
||||
* 1. Each sql statement in the log is separated by a blank line.
|
||||
* 2. Each sql statement is terminated with the timing string "{executed in N msec}" where N is the number of
|
||||
* milliseconds that the sql executed in.
|
||||
@@ -243,7 +243,7 @@ public class PostLogProfilerProcessor {
|
||||
* than, equal to, or greater than the specified object.<p>
|
||||
*
|
||||
* In this case the comparison is used to sort flagged sql in descending order.
|
||||
* @param o ProfiledSql Object to compare to this ProfiledSql. Must not be null.
|
||||
* @param o ProfiledSql Object to compare to this ProfiledSql. Must not be null.
|
||||
*/
|
||||
public int compareTo(Object o) {
|
||||
return ((ProfiledSql)o).execTime.compareTo(execTime);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user