use Log::Log4perl; sub set_session_id { my ($class) = shift; my ($session_id) = shift; unless(Log::Log4perl->initialized()) { Log::Log4perl->init_once('/opt/httpd/logger.conf'); $Log::Log4perl::caller_depth = 1; my $user_id = $ENV{USER} || $ENV{LOGNAME} || $ENV{USERNAME} || $ENV{REMOTE_ USER} || $<; Log::Log4perl->get_logger("esc"); Log::Log4perl::MDC->put("user_id", $user_id); Log::Log4perl::MDC->put("session_id", $session_id); } return Log::Log4perl->get_logger("esc"); } and my logger.conf is log4perl.logger.esc=DEBUG, DBAppndr #log4perl.rootLogger=DEBUG, DBAppndr log4perl.appender.DBAppndr=Log::Log4perl::Appender::DBI log4perl.appender.DBAppndr.datasource=dbi:Oracle:data log4perl.appender.DBAppndr.username=user log4perl.appender.DBAppndr.password=passwd log4perl.appender.DBAppndr.sql=insert into ESC_APP_LOG (LOG_LEVEL, LOGGER_NAME, MODULE, APP_ID, CLASS, METHOD, LINE_NO, HEADING, USER_ID, MSG, LOGGER_ID) values (?,?,?,?,?,?,?,?,?,?,?) etc and in my cgiapp_init sub routine I call logger as below my $logger = Logger->set_session_id($self->param('session')); $self->param('logger'=> $logger);