Hello,

My application has several dependencies, some of which have other
dependencies. I am using Log4j2 for logging and wanted to separate
application logs from dependency logs.

Below is my log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Properties>
    <property name="rollSuffix">%d{yyyyMMdd}</property>
    <property name="commonPattern">%d %level %class %method -
%msg%n</property>
  </Properties>
  <Appenders>
    <RollingFile name="xLog"
                 fileName="x.log"
                 filePattern="x-${rollSuffix}.log"
                 immediateFlush="true" >
      <PatternLayout pattern="${commonPattern}" />
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
      </Policies>
    </RollingFile>
    <RollingFile name="yLog"
                 fileName="y.log"
                 filePattern="y-${rollSuffix}.log"
                 immediateFlush="true" >
      <PatternLayout pattern="${commonPattern}" />
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
      </Policies>
    </RollingFile>
    <RollingFile name="zLog"
                 fileName="z.log"
                 filePattern="z-${rollSuffix}.log"
                 immediateFlush="true" >
      <PatternLayout pattern="${commonPattern}" />
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
      </Policies>
    </RollingFile>
    <RollingFile name="appLog"
                 fileName="app.log"
                 filePattern="app-${rollSuffix}.log"
                 immediateFlush="false" >
      <PatternLayout pattern="%d %-5p - %m%n" />
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
      </Policies>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Logger name="com.x" level="error" additivity="false" >
      <AppenderRef ref="xLog" />
    </Logger>
    <Logger name="io.y" level="error" additivity="false" >
      <AppenderRef ref="yLog" />
    </Logger>
    <Logger name="org.z" level="error" additivity="false" >
      <AppenderRef ref="zLog" />
    </Logger>
    <Root level="all">
      <AppenderRef ref="appLog" />
    </Root>
  </Loggers>
</Configuration>

As you can see, for each x, y, z, etc modules, I have defined an appender
and a logger. This made the xml too long and maintenance has become more
and more difficult.

I have some questions:

1. I had found out that multiple loggers should not refer to same file
appender (e.g. FileAppender, RollingFileAppender etc). Is it still valid
for latest versions?

2. Is there a way to shrink the xml by reducing both appenders and loggers?

3. Is it a feasible feature for log4j2 so that a logger can have multiple
names? (I am thinking about requesting the feature)
For example:
    <Logger level="error" additivity="false" >
      <Names>
        <Name name="com.x" />
        <Name name="io.y" />
        <Name name="org.z" />
      </Names>
      <AppenderRef ref="xLog" />
    </Logger>

Regards,
sazzad

Reply via email to