2

How can I configure log4j properties file to print DEBUG messages into a file and only INFO messages to console?

This is my properties file:

# Root logger option
log4j.rootLogger=INFO, stdout
log4j.logger.org.hibernate.SQL=TRACE, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %d{dd-MM-yyyy HH:mm:ss,SS} %t %c{1.}: %m%n
Eugene S
  • 6,709
  • 8
  • 57
  • 91
michele
  • 26,348
  • 30
  • 111
  • 168

2 Answers2

2

You can use log4j.properties like below:

# Root logger option
log4j.rootLogger=INFO, stdout, file
log4j.logger.org.hibernate.SQL=TRACE, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout..Threshold=INFO
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %d{dd-MM-yyyy HH:mm:ss,SS} %t %c{1.}: %m%n

# Direct log messages to file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.File=/var/log/logfile.log
log4j.appender.file.Append=true
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.DatePattern='-'yyyy-MM-dd'.log'
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d{ISO8601}] %-5p %x%m%n

By this properties file, log4j create new logfile for each day and save previews logfile with date.

Navand
  • 446
  • 4
  • 11
  • 1
    Are you sure this working? I understand the basic technique used here is one appender for one level and another appender for a different level. I tried this with the log4j2.xml file (error for console, fatal for file [Root logger]) but it only logs the root logger level in the file. There is nothing on the console. May be I am not using the code right? Could you provide the relevant portion of the code? – Navin Israni Jun 26 '17 at 18:32
1

Alternative way with log4j xml configuration. Because I prefer to use xml for log4j config. Perhaps this may help you from some way.

eg.

<?xml version="1.0" encoding="UTF-8"?>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
    debug="false">

<appender name="CONSOLE_LOG" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <param name="Threshold" value="INFO" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] %m%n" />
        </layout>
    </appender>
    <appender name="FILE_LOG" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="${catalina.home}/logs/debug.log" />
        <param name="Threshold" value="DEBUG" />
        <param name="maxBackupIndex" value="5" />
        <param name="maxFileSize" value="1500MB" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} |%5p| [%c] | %m%n" />
        </layout>
    </appender>

    <root>
        <appender-ref ref="CONSOLE_LOG" />
        <appender-ref ref="FILE_LOG" />
    </root>
</log4j:configuration>

So, your Java code be like:

logger.debug("your debug log message");
logger.info("your info log message");

To configure with log4j.properties, possible duplicate at How can I create 2 separate log files with one log4j config file?

Hope this help!

Community
  • 1
  • 1
Ye Win
  • 2,020
  • 14
  • 21