[ 
http://issues.apache.org/jira/browse/IBATISNET-35?page=comments#action_62703 ]
     
Ron Grabowski commented on IBATISNET-35:
----------------------------------------

Instead of copying all these statements:

 if (_logger.IsDebugEnabled)
 {
  _logger.Debug("Using Connection [" + command.Connection.GetHashCode() + "]");
  _logger.Debug("PreparedStatement: [" + request.PreparedStatement.PreparedSql 
+ "]");
  _logger.Debug("Parameters: [" + GenerateParametersString(request) + "]");
  _logger.Debug("Types: [" + GenerateTypesString(request) + "]");
 }

whenever a command needs to record log information about itself, we could 
create a proxy around the IDbCommand and IDataReader interfaces:

 using ( IDbCommand command = _preparedCommand.Create...)
 {
  if (_logger.IsDebugEnabled)
  {
   // wrap the IDbCommand within a special code proxy
   // that will automatically emit log messages when 
   // any of its Execute... methods are called
   command = DbCommandLogProxy.NewInstance(command);
  }

  using ( IDataReader reader = command.ExecuteReader() )
  {
   if (_logger.IsDebugEnabled)
   {
    reader = DataReaderLogProxy.NewInstance(reader);
   }
   
    // other code pertaining to the reader
 
  }
 }

Doing something like that would allow all the logging code for any 
implementation of IDbCommand to be stored in a central location without the 
implementations having to inheririt from a special base class. At least I think 
so...

I'm sure you've studied the IBatis Java source code Gilles so you're probably 
already familiar with code proxies and most of what I'm talking about. This is 
a bit new to me so I'm still going through the 
wow-I-didn't-know-that-was-possible phase. I'd be interested to see if you (or 
someone else) can think of a better implementation. I have a feeling I've 
overlooked something.

com.ibatis.common.jdbc.logging.BaseLog.java is the base class that handles 
outputing the integer sequence next to the respective log messages (3, 8, 47, 
etc.):

 {conn-100003}
 {pstm-100008}
 {rset-100047}

> Improve logging of text sent to database and recieved from database to match 
> Java version of IBatis
> ---------------------------------------------------------------------------------------------------
>
>          Key: IBATISNET-35
>          URL: http://issues.apache.org/jira/browse/IBATISNET-35
>      Project: iBatis for .NET
>         Type: Improvement
>     Versions: DataAccess 1.5, DataMapper 1.1
>  Environment: Data Mapper - [assembly: AssemblyVersion("1.1.458")]
> Data Access - [assembly: AssemblyVersion("1.5.458")]
>     Reporter: Ron Grabowski

>
> Here are some example logs from the Java version of IBatis. The examples show 
> INSERT, SELECT, UPDATE, and DELETE statements:
> DEBUG - Checked out connection 30332961 from pool.
> DEBUG - {conn-100003} Connection
> DEBUG - {pstm-100004} PreparedStatement: INSERT INFO UserAudit (UserId, 
> AuditEvent, DateOccurred) values (?,?,?)          
> DEBUG - {pstm-100004} Parameters: [4, audit.login.success, 2004-08-25 
> 09:15:22.809]
> DEBUG - {pstm-100004} Types: [java.lang.Integer, java.lang.String, 
> java.sql.Timestamp]
> DEBUG - {pstm-100005} PreparedStatement: SELECT LAST_INSERT_ID() AS id  
> DEBUG - {pstm-100005} Parameters: []
> DEBUG - {pstm-100005} Types: []
> DEBUG - {rset-100006} ResultSet
> DEBUG - {rset-100006} Header: [id]
> DEBUG - {rset-100006} Result: [422]
> DEBUG - Returned connection 30332961 to pool.
> DEBUG - Checked out connection 30332961 from pool.
> DEBUG - {conn-100007} Connection
> DEBUG - {pstm-100008} PreparedStatement: SELECT UserId, Login, Password FROM 
> User WHERE Login = ? and Password = ?
> DEBUG - {pstm-100008} Parameters: [abc123, def456]
> DEBUG - {pstm-100008} Types: [java.lang.String, java.lang.String]
> DEBUG - {rset-100009} ResultSet
> DEBUG - {rset-100009} Header: [UserId, Login, Password]
> DEBUG - {rset-100009} Result: [4, abc1234, def456]
> DEBUG - Returned connection 30332961 to pool.
> DEBUG - Checked out connection 4548856 from pool.
> DEBUG - {conn-100045} Connection
> DEBUG - {pstm-100046} PreparedStatement: SELECT UserId, Login FROM User
> DEBUG - {pstm-100046} Parameters: []
> DEBUG - {pstm-100046} Types: []
> DEBUG - {rset-100047} ResultSet
> DEBUG - {rset-100047} Header: [UserId, Login]
> DEBUG - {rset-100047} Result: [1, abc123]
> DEBUG - {rset-100047} Result: [4, def456]
> DEBUG - {rset-100047} Result: [6, aaaaa]
> DEBUG - Returned connection 4548856 to pool.
> DEBUG - Checked out connection 7125805 from pool.
> DEBUG - {conn-100043} Connection
> DEBUG - {pstm-100044} PreparedStatement: UPDATE User SET Login = ? WHERE 
> UserId = ?
> DEBUG - {pstm-100044} Parameters: [aaaaa, 4]
> DEBUG - {pstm-100044} Types: [java.lang.String, java.lang.Integer]
> DEBUG - Returned connection 7125805 to pool.
> DEBUG - Checked out connection 27062282 from pool.
> DEBUG - {conn-100043} Connection
> DEBUG - {pstm-100044} PreparedStatement: DELETE FROM User WHERE UserId = ?
> DEBUG - {pstm-100044} Parameters: [4]
> DEBUG - {pstm-100044} Types: [java.lang.Integer]
> DEBUG - Returned connection 27062282 to pool.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira

Reply via email to