log4j (1.2.15) logging to different DailyRollingFileAppender log files for different log levels from same package?

Viewed 245

I'm trying to write logs to 2 different DailyRollingFileAppender log files for different log levels (specifically INFO & ERROR) from the same package. Following is my log4j.properties file :

log4j.rootLogger=INFO,webAppDRFA

log4j.category.com.webapp.controller.sd=INFO,sdInfoDRFA
log4j.category.com.webapp.controller.sd=ERROR,sdErrorDRFA
log4j.additivity.com.webapp.controller.sd=false

log4j.category.com.webapp.controller.td=INFO,tdInfoDRFA
log4j.category.com.webapp.controller.td=ERROR,tdErrorDRFA
log4j.additivity.com.webapp.controller.td=false

log4j.appender.webAppDRFA=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.webAppDRFA.DatePattern='.'dd-MMM-yyyy'.log'
log4j.appender.webAppDRFA.File=D:\\WebApp-Logs\\CMWebappLogs\\webapp.log
log4j.appender.webAppDRFA.layout=org.apache.log4j.PatternLayout
log4j.appender.webAppDRFA.layout.ConversionPattern=%-5p[%d \: Class-%C \: Method-%M]\: %m%n
log4j.appender.webAppDRFA.Threshold=WARN

#--[START] Info & Error DailyRollingFileAppender logging config for SD--
log4j.appender.sdInfoDRFA=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.sdInfoDRFA.DatePattern='_'MM-DD-YYYY'.log'
log4j.appender.sdInfoDRFA.File=D:\\CMWebappLogs\\SD\\Info_Log\\SD_Info.log
log4j.appender.sdInfoDRFA.layout=org.apache.log4j.PatternLayout
log4j.appender.sdInfoDRFA.layout.ConversionPattern=%-5p[%d \: Class-%C \: Method-%M]\: %m%n
log4j.appender.sdInfoDRFA.filter.lrf4SDJIDRFA=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.sdInfoDRFA.filter.lrf4SDJIDRFA.levelMin=INFO
log4j.appender.sdInfoDRFA.filter.lrf4SDJIDRFA.levelMax=INFO
log4j.appender.sdInfoDRFA.filter.lrf4SDJIDRFA.acceptOnMatch=true

log4j.appender.sdErrorDRFA=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.sdErrorDRFA.DatePattern='_'MM-DD-YYYY'.log'
log4j.appender.sdErrorDRFA.File=D:\\CMWebappLogs\\SD\\Error_Log\\SD_Error.log
log4j.appender.sdErrorDRFA.layout=org.apache.log4j.PatternLayout
log4j.appender.sdErrorDRFA.layout.ConversionPattern=%-5p[%d \: Class-%C \: Method-%M]\: %m%n
log4j.appender.sdErrorDRFA.filter.lrf4SDJEDRFA=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.sdErrorDRFA.filter.lrf4SDJEDRFA.levelMin=ERROR
log4j.appender.sdErrorDRFA.filter.lrf4SDJEDRFA.levelMax=ERROR
log4j.appender.sdErrorDRFA.filter.lrf4SDJEDRFA.acceptOnMatch=true
#--[END] Info & Error DailyRollingFileAppender logging config for SD--

#--[START] Info & Error DailyRollingFileAppender logging config for TD--
log4j.appender.tdInfoDRFA=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.tdInfoDRFA.DatePattern='_'MM-DD-YYYY'.log'
log4j.appender.tdInfoDRFA.File=D:\\CMWebappLogs\\TD\\Info_Log\\TD_Info.log
log4j.appender.tdInfoDRFA.layout=org.apache.log4j.PatternLayout
log4j.appender.tdInfoDRFA.layout.ConversionPattern=%-5p[%d \: Class-%C \: Method-%M]\: %m%n
log4j.appender.tdInfoDRFA.filter.lrf4PAJIDRFA=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.tdInfoDRFA.filter.lrf4PAJIDRFA.levelMin=INFO
log4j.appender.tdInfoDRFA.filter.lrf4PAJIDRFA.levelMax=INFO
log4j.appender.tdInfoDRFA.filter.lrf4PAJIDRFA.acceptOnMatch=true

log4j.appender.tdErrorDRFA=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.tdErrorDRFA.DatePattern='_'MM-DD-YYYY'.log'
log4j.appender.tdErrorDRFA.File=D:\\CMWebappLogs\\TD\\Error_Log\\TD_Error.log
log4j.appender.tdErrorDRFA.layout=org.apache.log4j.PatternLayout
log4j.appender.tdErrorDRFA.layout.ConversionPattern=%-5p[%d \: Class-%C \: Method-%M]\: %m%n
log4j.appender.tdErrorDRFA.filter.lrf4PAJEDRFA=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.tdErrorDRFA.filter.lrf4PAJEDRFA.levelMin=ERROR
log4j.appender.tdErrorDRFA.filter.lrf4PAJEDRFA.levelMax=ERROR
log4j.appender.tdErrorDRFA.filter.lrf4PAJEDRFA.acceptOnMatch=true
#--[END] Info & Error DailyRollingFileAppender logging config for TD--

The above configuration generates only the Error_log files and Info_log files are not created at all. Also, the Error_log files created do not get rolled over to next date. Can the above requirement be achieved at all? If yes, please suggest me the corrections to be done.

1 Answers

The problem is that you are overwriting the category configuration.

You need to define each category as follows:

log4j.category.com.webapp.controller.sd=INFO,sdInfoDRFA,sdErrorDRFA

You must define the minimum log level required for the category to emit log traces, in your case, INFO, and the different appenders that the category will use.

The filtering mechanism will route the different emitted traces to the corresponding appenders and logs files.

Related