lamwaiman1988
lamwaiman1988

Reputation: 3742

log4j log problem

I am writing an servlet. I having several classes, some of them I want their log to be seperated from each other. Here is the log4j configuration file:

log4j.rootLogger=INFO, CONSOLE, SearchPdfBill, Scheduler

# CONSOLE is set to be a ConsoleAppender.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=<%p> %c{1}.%t %d{HH:mm:ss} - %m%n

# LOGFILE is set to be a file
log4j.appender.SearchPdfBill=org.apache.log4j.DailyRollingFileAppender
log4j.appender.SearchPdfBill.File = /bps/app/BpsPdfBill/BpsPdfBill.ear/BpsPdfBill.war/WEB-INF/logs/BpsPdfBill.log
#log4j.appender.SearchPdfBill.File = E:\\Workspace\\Eclipse_Workspace\\BpsPdfBill\\log\\BpsPdfBill.log
log4j.appender.SearchPdfBill.Append = true
log4j.appender.SearchPdfBill.DatePattern = '.'yyyy-MM-dd
log4j.appender.SearchPdfBill.layout=org.apache.log4j.PatternLayout
log4j.appender.SearchPdfBill.layout.ConversionPattern=<%p> %c{1}.%t %d{HH:mm:ss} - %m%n

# LOGFILE is set to be a file
log4j.appender.Scheduler=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Scheduler.File = /bps/app/BpsPdfBill/BpsPdfBill.ear/BpsPdfBill.war/WEB-INF/logs/Schedule.log
#log4j.appender.Scheduler.File = E:\\Workspace\\Eclipse_Workspace\\BpsPdfBill\\log\\BpsPdfBill.log
log4j.appender.Scheduler.Append = true
log4j.appender.Scheduler.DatePattern = '.'yyyy-MM-dd
log4j.appender.Scheduler.layout=org.apache.log4j.PatternLayout
log4j.appender.Scheduler.layout.ConversionPattern=<%p> %c{1}.%t %d{HH:mm:ss} - %m%n

I setup a logger here:

            String logDir = conf.getInitParameter("log_file_path");
        if (logDir == null) {
            initErrMsg = "Param - log_file_path cannot be empty";
            throw new ServletException(initErrMsg);
        }

        if ((logger = Logger.getLogger(SearchPdfBill.class)) != null) {
            //writeLog("Initializing log4j.");
            conf.getServletContext().log("Log4j initialized.");
        } else {
            conf.getServletContext().log("Cannot initialize log4j properly.");
        }

And another logger here:

            logDir = sc.getInitParameter("log_file_path");
        if (logDir == null) {
            initErrMsg = "Param - log_file_path cannot be empty";
            try {
                throw new ServletException(initErrMsg);
            } catch (ServletException e) {
                // TODO Auto-generated catch block
                conditionalWriteLog(logEnabled, e.getMessage());
            }
        }

        if ((logger = Logger.getLogger(Scheduler.class)) != null) {
            //writeLog("Initializing log4j.");
            conditionalWriteLog(logEnabled, "Log4j initialized.");
        } else {
            conditionalWriteLog(logEnabled, "Cannot initialize log4j properly.");
        }

However, it end up the 2 two logger are logging the same thing. Every log is log to the 2 file identically. Why?

I think the configuration file is wrong probably, but I don't know where it is, can somebody help me to correct that?

Upvotes: 0

Views: 616

Answers (1)

laz
laz

Reputation: 28638

You need to define those two loggers in your configuration file. Are those objects within a package? That is important to the way you will configure them. Say the package is com.gunbuster:

log4j.category.com.gunbuster.SearchPdfBill=INFO, SearchPdfBill
log4j.additivity.com.gunbuster.SearchPdfBill=false

log4j.category.com.gunbuster.Scheduler=INFO, Scheduler
log4j.additivity.com.gunbuster.Scheduler=false

The additivity setting is to prevent those loggers from adding to the rootLogger output to CONSOLE Also, you should make the first line:

log4j.rootLogger=INFO, CONSOLE

So that the rootLogger does not add entries into those files.

Upvotes: 1

Related Questions