0

My Goal:

To achieve all the custom, built-in loggers to different files from the same package.

  1. Info - Info log file
  2. Debug - Debug log file
  3. perf - perf log file - custom one

What I tried:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                pattern="%d{HH:mm:ss.SSS} [%t] %-5level %c{36} - %msg%n" />
        </Console>
        <RollingFile name="RollingDebugFile"
            fileName="logs/application-debug.log"
            filePattern="logs/application-debug%d{yyyy-MM-dd-HH-mm}.log"
            append="true">
            <Filters>
                <ThresholdFilter level="DEBUG" />
                <ThresholdFilter level="INFO" onMatch="DENY"
                    onMismatch="NEUTRAL" />
            </Filters>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %c{36} %l: %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                    modulate="true" />
            </Policies>
        </RollingFile>
        <RollingFile name="RollingInfoFile"
            fileName="logs/application-info.log"
            filePattern="logs/application-info%d{yyyy-MM-dd-HH-mm}.log"
            append="true">
            <Filters>
                <ThresholdFilter level="INFO" />
                <ThresholdFilter level="WARN" onMatch="DENY"
                    onMismatch="NEUTRAL" />
            </Filters>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %c{36} %l: %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                    modulate="true" />
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Logger name="testlog4j2" additivity="false">
            <AppenderRef ref="RollingDebugFile" level="debug" />
            <AppenderRef ref="Console" />
        </Logger>
        <Logger name="testlog4j2" additivity="false">
            <AppenderRef ref="RollingInfoFile" level="info" />
            <AppenderRef ref="Console" />
        </Logger>
        <Root level="ALL">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

Here the problem:

logger names are same. Hence latest logger only works. Info works but nor debug in this case.

My doubt:

I referred so many posts. I think the below things work.

  1. Make each one as custom logger as mentioned here. But I am sure whether it is the correct solution?
  2. Am I on the correct way with respect to log4j2.xml file? I am newbie so kindly help with any suggestions.
Mano
  • 55
  • 7

1 Answers1

0

After deep diving into this, I figured out that I have to use the below. Otherwise loggers will be overwritten

<Logger name="testlog4j2" additivity="false">
        <AppenderRef ref="RollingDebugFile" level="debug" />
        <AppenderRef ref="RollingInfoFile" level="info" />
        <AppenderRef ref="RollingWarnFile" level="warn" />
        <AppenderRef ref="Console" />
    </Logger>
Mano
  • 55
  • 7