]
Baptiste MATHUS commented on HHH-2413:
--------------------------------------
Hi,
Well, there's a very simple way to manage this for part of the problem. When I control
the logs, I can create my logger this way:
private static final Log logger =
LogFactory.getLog("org.hibernate.type."+MyUserType.class.getSimpleName());
This way, putting
log4j.logger.org.hibernate.type=trace
is sufficient to also display the bindings coming from my code
The thing is, when I develop a UserType than inherit NullableType for example, the logger
creation is not available since this is managed in the parent class by using the
NullableType.log() method. Couldn't this method become protected (private at the
moment)?
Thanks
Offer a way to log bound jdbc parameters in a uniform way for
UserType implementors
-----------------------------------------------------------------------------------
Key: HHH-2413
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2413
Project: Hibernate3
Issue Type: Improvement
Affects Versions: 3.2.2
Reporter: Baptiste MATHUS
Priority: Minor
Original Estimate: 2 hours
Remaining Estimate: 2 hours
At the moment, when someone implements a UserType, the bound parameters won't be
displayed in not explicitly displayed via loggers.
For example, here is what the code of NullableType.nullSafeGet() is :
public final void nullSafeSet(PreparedStatement st, Object value, int index)
throws HibernateException, SQLException {
try {
if ( value == null ) {
if ( IS_TRACE_ENABLED ) {
log().trace( "binding null to parameter: " + index );
}
st.setNull( index, sqlType() );
}
else {
if ( IS_TRACE_ENABLED ) {
log().trace( "binding '" + toString( value ) + "' to
parameter: " + index );
}
set( st, value, index );
}
}
catch ( RuntimeException re ) {
log().info( "could not bind value '" + toString( value ) + "'
to parameter: " + index + "; " + re.getMessage() );
throw re;
}
catch ( SQLException se ) {
log().info( "could not bind value '" + toString( value ) + "'
to parameter: " + index + "; " + se.getMessage() );
throw se;
}
}
IMO, it would be quite a good thing to provide some method in Hibernate, something like
logBoundParameter() that would do the log like above :
> log().trace( "binding '" + toString( value ) + "' to
parameter: " + index );
This method could then be just called by implementors so as to guaranty the display is
always the same about bound parameters.
Even more, I think it should use a special logger, just like the org.hibernate.SQL one to
display this parameters. In fact, at the moment, I feel the reference documentation is not
very clear about this : see
http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configurat....
It says :
> org.hibernate.type Log all JDBC parameters
But that's not completely true: it will only log bound parameters that are parameters
typed with standard types coming from the org.hibernate.type package. Any custom UserType
won't display anything until you:
1) put the right log4j line for the package where your userType is located ;
2) think about explicitly logging those parameter values in your custom UserType (cf. my
first point).
I'm not sure I made myself totally clear,. If so, please let me know.
If you think that would be worth an improvement, I'll give a look to provide a patch
for this. Thanks a lot.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: