2

I'm trying to understand the following log4j.xml file:

---Item 1
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p: %c - %m%n" />
    </layout>
</appender>
----Item 2
<!-- Application Loggers -->
<logger name="com.somepackagename">
    <level value="info" />
</logger>
--Item 4 
<logger name="org.hibernate.validator">
    <level value="debug" />
</logger>    
  ---Item 5
<!-- Root Logger -->
<root>
    <priority value="warn" />
    <appender-ref ref="console" />
</root>
</log4j:configuration>

Can anyone explain what each item does?

Kenster
  • 23,465
  • 21
  • 80
  • 106
das kinder
  • 1,180
  • 2
  • 10
  • 16

1 Answers1

4
<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p: %c - %m%n" />
    </layout>
</appender>

Appenders are responsible for delivering LogEvents to their destination. The name of of the appender is "console" and this is the name that is used to refer to the appender in the rest of the configuration file. The class to use for the appender is org.apache.log4j.ConsoleAppender .

The console appender has one param element defined. Looking at the javadoc for ConsoleAppender , the setTarget method is used to choose which console stream to print messages to, System.out or System.err. This one configures the appender to use System.out.

The console appender also has a layout element defined which uses org.apache.log4j.PatternLayout . Looking at the javadoc for PatternLayout , the setConversionPattern method takes a string describing the layout for messages. The details of this format can also be found in the javadoc.

Then you have three loggers:

A logger element must have a name attribute. This is the name of the logger used when creating the Logger instance(usually the fully qualified class name, in this case com.somepackagename).

<!-- Application Loggers -->
<logger name="com.somepackagename">
    <level value="info" />
</logger>

<logger name="org.hibernate.validator">
    <level value="debug" />
</logger>    

The most important logger you need to configure is the root logger. The root logger is configured to output log message at level "debug" or higher to the appender named "console".

<!-- Root Logger -->
<root>
    <priority value="warn" />
    <appender-ref ref="console" />
</root>

For more on log4j priority values: log4j logging hierarchy order

Community
  • 1
  • 1
truenite
  • 67
  • 1
  • 8