Monday, 9 February 2015

Logging to different files based on logger name in log4j.xml



I wanted to log the message into the files based on only logger name that i specified, as logger name is sent as a parameter in log message. By default all my log files are getting appended irrespective of logger name, as i have added ref of all appenders under root.


My log4j.xml is as below.



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true">
<!-- ========== appenders start here ========= -->

<appender name="operator_log" class="org.apache.log4j.DailyRollingFileAppender">
<param name="ImmediateFlush" value="true" />
<param name="Append" value="true" />
<param name="File" value="C:/SSG_Admin.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{DATE}|%5p|%m%n" />
</layout>
</appender>

<appender name="security_log" class="org.apache.log4j.DailyRollingFileAppender">
<param name="ImmediateFlush" value="true" />
<param name="Append" value="true" />
<param name="File" value="C:/SSG_Security.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{DATE}|%5p|%m%n" />
</layout>
</appender>

<appender name="application_log" class="org.apache.log4j.DailyRollingFileAppender">
<param name="ImmediateFlush" value="true" />
<param name="Append" value="true" />
<param name="File" value="C:/SSG_Core.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{DATE}|%5p|%m%n" />
</layout>
</appender>

<!-- ========= loggers start here ========= -->
<logger name="DB_CONNECTION_ISSUE" additivity="false">
<level value="debug" />
<appender-ref ref="operator_log" />
<appender-ref ref="application_log" />
</logger>
<logger name="NETWORK_ISSUE" additivity="false">
<level value="debug" />
<appender-ref ref="operator_log" />
<appender-ref ref="application_log" />
</logger>
<logger name="COMMUNICATION_ISSUE" additivity="false">
<level value="debug" />
<appender-ref ref="operator_log" />
<appender-ref ref="application_log" />
</logger>
<logger name="ACCESS_ISSUES" additivity="false">
<level value="debug" />
<appender-ref ref="security_log" />
<appender-ref ref="application_log" />
</logger>
<logger name="CERTIFICATE_ISSUE" additivity="false">
<level value="debug" />
<appender-ref ref="security_log" />
<appender-ref ref="application_log" />
</logger>

<logger name="VALIDATION_OR_DATA_ISSUE" additivity="false">
<level value="debug" />
<appender-ref ref="application_log" />
</logger>
<logger name="OTHER_ISSUE" additivity="false">
<level value="debug" />
<appender-ref ref="application_log" />
</logger>

<root>
<priority value="debug" />
<appender-ref ref="operator_log" />
<appender-ref ref="security_log" />
<appender-ref ref="application_log" />
</root>


The specified appenders under loggers only should append the respective files for me. but, all files getting appended irrespective of logger name. I am very new to loggers. Is there any solution for this...


No comments:

Post a Comment