I appreciate the input although considering that DBNameResolver is a mere component of DBAppender, using generics in this case is probably not the best design one can come up with.

On 26.02.2010 13:27, Durchholz, Joachim wrote:
(If logback can use generic classes, then
DBAppender<DBNameResolver>  would be optimal IMHO.)

Right, http://logback.qos.ch/dependencies.html says Java 1.5.

Here's a design outline with generics.
I left out enums because I'm not so sure whether they're such a great
idea after all, and because it works just fine without them :)

First, the base class:

class DBAppender<DBNameResolver>  {
   // Uses dbNameResolver.getEventTableName etc.
}
class DBNameResolver {
   String getEventTableName ()             { return "logging_event"; }
   String getTimestampColumnName ()        { return "timestmp"; }
   String getFormattedMessageColumnName () { return "formatted_message";
}
   ...
   String getEventPropertyTableName ()  { return
"logging_event_property"; }
   ...
   String getEventExceptionTableName () { return
"logging_event_exception"; }
   ...
}

A variant for storing log parameters:

class DBAppenderWithParameters<DbNameResolverWithParameters>  {
   // Uses new dbNameResolver function getArgumentColumnNames
   // to construct the INSERT statement
}
class DbNameResolverWithParameters extends DBNameResolver {
   // Keep inherited definitions, just add the parameter column names
   String [] argumentColumnNames = new String []
     {"arg1", "arg2", "arg3", "arg4", "arg5", "arg5", "arg7", "arg8"};
   String [] getArgumentColumnNames { return argumentColumNames; }
}

HTH
Jo
_______________________________________________
logback-dev mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-dev

Reply via email to