1
votes

I have to implement log4j in following manner in our web application:

1) DEBUG level logs must not append in any file. These logs should available only on console of development workstations/IDEs while developing the application. - its happening now but after deployment these logs get appended in catalina.out which I have to stop.

2) INFO onward application logs should go in one log file - its happening right now.

3) One another file based logging should also happen for performance logging of entire application using Spring AOP - not yet implemented.

log4j configuration is given below:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender" >
<param name="Threshold" value="DEBUG" />   
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %-5p  [%c{1}] %m %n" />
  </layout>
</appender>

<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
  <param name="Threshold" value="INFO" />
  <param name="File" value="${catalina.home}/logs/dashboard.log"/>
  <param name="DatePattern" value="'-'yyyy-MM-dd'.log'"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="[%d{ISO8601}] - %-5p- [%X{USER_ENCRYPT_ID}%x] - %C.%M(%F:%L) - %m %n" />
  </layout>
</appender>


<logger name="com.project14" additivity="false" >   
  <level value="DEBUG" />
  <appender-ref ref="consoleAppender" /> 
  <appender-ref ref="fileAppender"/>      
</logger>

</log4j:configuration>

I am new for log4j configuration, so please validate and suggest necessary implementation to achieve my requirements.

1

1 Answers

1
votes

As I understand, you want different appenders to push logs to different log files or something similar.

One thing you are missing here. Please try to use filters. Here is a simple example which sends different logs to different files using filters.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="DEBUG" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p  [%c{1}] %m %n" />
    </layout>
</appender>

<appender name="fileAppenderInfo" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="INFO" />
    <param name="File" value="d:/info.log" />
    <param name="DatePattern" value="'-'yyyy-MM-dd'.log'" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
            value="[%d{ISO8601}] - %-5p- [%X{USER_ENCRYPT_ID}%x] - %C.%M(%F:%L) - %m %n" />
    </layout>
     <filter class="org.apache.log4j.varia.LevelRangeFilter">
                    <param name="levelMin" value="INFO" />
                    <param name="levelMax" value="INFO" />
     </filter>
</appender>

<appender name="fileAppenderDebug" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="DEBUG" />
    <param name="File" value="d:/debug.log" />
    <param name="DatePattern" value="'-'yyyy-MM-dd'.log'" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
            value="[%d{ISO8601}] - %-5p- [%X{USER_ENCRYPT_ID}%x] - %C.%M(%F:%L) - %m %n" />
    </layout>
     <filter class="org.apache.log4j.varia.LevelRangeFilter">
                    <param name="levelMin" value="DEBUG" />
                    <param name="levelMax" value="DEBUG" />
     </filter>
</appender>

<appender name="fileAppenderWarn" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="WARN" />
    <param name="File" value="d:/warn.log" />
    <param name="DatePattern" value="'-'yyyy-MM-dd'.log'" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
            value="[%d{ISO8601}] - %-5p- [%X{USER_ENCRYPT_ID}%x] - %C.%M(%F:%L) - %m %n" />
    </layout>
     <filter class="org.apache.log4j.varia.LevelRangeFilter">
                    <param name="levelMin" value="WARN" />
                    <param name="levelMax" value="WARN" />
     </filter>
</appender>


<logger name="com.log4j.test" additivity="false">
    <level value="all"/>
    <appender-ref ref="fileAppenderWarn" />
    <appender-ref ref="fileAppenderDebug"/>
    <appender-ref ref="fileAppenderInfo"/>
</logger>
</log4j:configuration>

Hope this helps. Please get back to me if you face some other issues.