-
Notifications
You must be signed in to change notification settings - Fork 96
Description
Reladomo's sql logging is so useful that I sometimes leave it turned on in production.
DEBUG com.gs.fw.common.mithra.sqllogs.MyClass: connection:1030722971 find with: select t0.key,t0.number from MY_CLASS t0 where t0.key = 'abcd' and t0.system_to = '9999-12-01 23:59:00.000'
DEBUG com.gs.fw.common.mithra.sqllogs.MyClass: retrieved 1 objects, 2.0 ms per
I have some ideas on how to make this logging even more useful.
It's currently hard to log only sql, or only timings, without the other. That's because both log statements using the same logger, com.gs.fw.common.mithra.sqllogs.MyClass
in this example. I propose adding markers for each.
private static final Marker MARKER_SQL = MarkerFactory.getMarker("Reladomo SQL");
private static final Marker MARKER_TIMING = MarkerFactory.getMarker("Reladomo Timing");
And adding the markers to the relevant log statements. For example, change this:
logger.debug("source '" + source + "': " + text);
to
logger.debug(MARKER_SQL, "source '" + source + "': " + text);
In addition, the timing information could be even more useful if I didn't have to parse it out of the logged message. I propose adding the timing information to MDC. That way I more easily create dashboards of the amount of time spent on queries over time.
For example, change this:
this.sqlLogger.debug("retrieved " + this.rowCount + " objects, " +
((this.rowCount > 0) ? ((totalTime / this.rowCount) + " ms per") : (totalTime +
" ms")));
to
MDC.put("rowCount", String.valueOf(this.rowCount));
MDC.put("totalTime", String.valueOf(totalTime));
try
{
this.sqlLogger.debug(MARKER_TIMING, "retrieved " + this.rowCount + " objects, " + ((this.rowCount > 0) ? (totalTime / this.rowCount + " ms per") : (totalTime + " ms")));
}
finally
{
MDC.remove("rowCount");
MDC.remove("totalTime");
}
I'm happy to contribute these changes but I wanted to discuss here before working on the whole thing.
I'm starting with the assumption that changing the existing logging is undesirable because users already rely on the current behavior. So this proposal adds markers and MDC but doesn't change, remove, or combine any messages. What do you think?