Setting root log level via command line for log4j2

35 Views Asked by At

We have a bit old J2EE application that use slf4j and log4j2 for logging. Dependencies looks like below.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.17.1</version>
</dependency>

log4j2.xml looks like following

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="CA_OUTPUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %X{user} %X{userIp} %p %c: %m%n"/>
    </Console>
    <File name="LOG_OUTPUT" fileName="${sys:xyz.logs.home}/xyz.log" 
        append="true">
        <PatternLayout pattern="%d [%t] %-5p %c - %m%n"/>       
    </File>
  </Appenders>
  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="CA_OUTPUT"/>
      <AppenderRef ref="LOG_OUTPUT"/>
    </Root>
    <Logger name="org.apache.axis2.enterprise" level="FATAL">
        <AppenderRef  ref="LOG_OUTPUT"/>
    </Logger>
    <Logger name="de.hunsicker.jalopy.io" level="FATAL">
        <AppenderRef  ref="LOG_OUTPUT"/>
    </Logger>
    <Logger name="httpclient.wire.header" level="FATAL">
        <AppenderRef  ref="LOG_OUTPUT"/>
    </Logger>    
    <Logger name="org.apache.commons.httpclient" level="FATAL">
        <AppenderRef  ref="LOG_OUTPUT"/>
    </Logger>   
  </Loggers>
</Configuration>

We have a small swing application to mimic the web application for development purpose. The problem is I want to set the rool log level by the command line. I tried many ( eg -Dorg.apache.logging.log4j.level=DEBUG, -Dorg.slf4j.simpleLogger.defaultLogLevel=debug) but nothing did the trick.

Of course I can set it programmatically.

Configurator.setRootLevel(Level.DEBUG);

But I would like to do it by passing a JVM argument. Thanks in advance

0

There are 0 best solutions below