Hello all:
I'm looking for opinions on whether to use an NDC, MDC, or use something like 
log.debug( new MyLogObj( "", context) ).

I guess I should provide some background:
I have a database that stores the states of "jobs" that ran on the system.  
Each job has a unique identifier.  The database can also store log messages 
related to the job via a table named "joblogs" that has a foreign key (column 
named "job_id") to the "jobs" table.

I have created an appender subclass that uses Hibernate to add the log messages 
to the "joblogs" table.  The problem is that my appender needs to know the 
"job_id" (so that the foreign key "joblogs.job_id" can be filled in).

I can think of 4 approaches to pass the job_id through to the appender.
1) Create loggers for each identifier.  I rejected this one pretty quickly 
because of the accumulation of loggers and the requirement to parse the logger 
name. For example:
        Logger log = Logger.getLogger( " job.id.1" );

2) Create a new class (named something like JobLog) that is passed as the first 
parameter in the debug(), info(), warn(), and error() functions.  This is the 
one I implemented before looking deeply into NDCs and MDCs.  For example:
        
        private static final Logger log = Logger.getLogger( "job" );
        int jobId = 1;
        log.warn( new JobLogMsg( "Avoid doing that!", jobId ) );

3) Use MDC.
        private static final Logger log = Logger.getLogger( "job" );

        Integer jobId = new Ingteger(1);
        MDC.put( "jobid", jobId );
        log.error( "Job failed!", exception );
        MDC.remove( "jobid" );

4) Use NDC.  I think using MDCs is better than NDCs but I'm still open to being 
convinced otherwise.

My preference is for 2 (because it's already implemented and works and the code 
is shorter) but I wonder if 3 might provide a better solution for reasons that 
I can't think of at the moment.

Cheers 
--
Steven Keens
 
"In preparing for battle I have always found that plans are useless, but 
planning is indispensable."
          -- Dwight D. Eisenhower


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to