Hi,

I have a multi threaded application.
There are multiple task getting created in the application which will log to
a separate log file.

*For each task the log file initialization happens in AbstractTaskComponent
as follows:*

        // get the log directory
        File taskLogDir =
TaskControllerComponent.getTaskControllerComponent().getTaskLogDirectory();
        File taskLogFile = new File( taskLogDir, task.getTskId() + ".log" );
        taskLogRejectedFile = new File( taskLogDir, task.getTskId() +
".rejected.rawrecord.log" );

        // add a special appender for placing this task's log messages in
its own file
        // get the log level of the main logger
        Logger rootLogger = LogManager.getRootLogger();

        // the custom appender for this task logger
        FileAppender appender = null;

        try
        {
            appender = new FileAppender( new PatternLayout( "%m%n" ),
taskLogFile.getAbsolutePath() );
        }
        catch ( IOException e )
        {
            log.error( "Error adding custom log appender for task logging",
e );
        }

        // filter log messages to this appender by only printing messages
generated by threads belonging to the
        // same thread group as the main thread, if the thread's group is
the main group then just log
        // messages from this thread
        if ( runner.getThreadGroup().getParent() != null )
        {
            appender.addFilter( new ThreadGroupFilter(
runner.getThreadGroup() ) );
        }
        else
        {
            appender.addFilter( new ThreadFilter( runner ) );
        }

        rootLogger.addAppender( appender );
*
Also the logger configuration happens at one time while initiating the
application as follows:*

       // get the logging configuration file - must exist
        URL logURL = getClass().getResource( "/log4j_server.properties" );
        if ( logURL == null )
        {
            System.out.println( "Could not find log4j_server.properties log
configuration file" );
            return;
        }

        // initialise the logging framework
        PropertyConfigurator.configure( logURL );

* The properties set in log4j_server.properties as follows:
*
# general program output:
log4j.rootCategory=INFO,stdout,alog

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] [%t] (%F:%L) - %m%n

# access log output:
log4j.appender.alog=org.apache.log4j.FileAppender
log4j.appender.alog.file=server.log
log4j.appender.alog.append=false
log4j.appender.alog.layout=org.apache.log4j.PatternLayout
log4j.appender.alog.layout.ConversionPattern=%5p [%c] [%t] (%F:%L) - %m%n


log4j.logger.com.azure=TRACE
log4j.logger.net.sf.hibernate=INFO*

Still some times the log getting mixed up(one task log in another task file)
*. But this happens once in a while

I was unable to find in what scenario it is going wrong.

Any help would be appreciated.

Regards,
Pradeep

Reply via email to