Search code examples
logginglog4jjvm-arguments

How to set log level in log4j from properties file in runtime


How do I set log level in log4j.xml using properties file in runtime time?

<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
               value="%d{ABSOLUTE} %-5p [%c{1}] [%t]: %m%n" />
    </layout>
</appender>

<logger name="com.mypackage" additivity="false">
    <level value="${level}" />
    <appender-ref ref="ConsoleAppender" />
</logger>

I set the value of $level from my vm arguments by passing the value as -Dlevel="warn" so that all messages with level warn and above got logged.

Now my problem is I have to set the value of log level from a properties file instead of vm arguments ? How can I do this?

P.S : I am using common.logging in the java code with log4j as a configuration mechanism.


Solution

  • Here's the way to change log level dynamically:

    LogManager.getRootLogger().setLevel(Level.DEBUG);
    

    To use a property from custom file use Properties.loadFromXML to read a file with properties, then determine a level using these properties.