2

Can you explain me, how to configure log4j.properties - so to save only levels: "trace","debug","info" in the file. This code saved in the file only levels from "INFO" to "FATAL"

log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log4j-HigherWarnSaveInFile.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.Append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{2}:%L - %m%n

Java file
LOGGER.trace("Trace Message!");
LOGGER.debug("Debug Message!");
LOGGER.info("Info Message!");
LOGGER.warn("Warn Message!");
LOGGER.error("Error Message!");
LOGGER.fatal("Fatal Message!");
flup
  • 26,937
  • 7
  • 52
  • 74
mvoron
  • 111
  • 3
  • 10

1 Answers1

2

Log4j works with a threshold mechanism, so usually you define a threshold and all messages logged on or above that level will be logged.

So if you set the threshold level to INFO, you'll log INFO, WARN, ERROR and FATAL. TRACE and DEBUG will be filtered out. This is not what you need.

But you can set the root logger's threshold to TRACE or ALL and then use a LevelRangeFilter to filter out the higher level messages.

log4.rootLogger=ALL, file
[...]
log4j.appender.file.filter=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.file.filter.LevelMin=TRACE
log4j.appender.file.filter.LevelMax=INFO
flup
  • 26,937
  • 7
  • 52
  • 74