Log4j Configuration Files
Table of Contents
ToggleLog4j Configuration Files
The most widely used configuration files are as follows:
Log4j is a popular logging framework for Java applications. Configuration files for Log4j define how logging is handled, such as log levels, appender types, and where the logs should be written (e.g., to a file, console, or database). There are different ways to configure Log4j, including using XML, JSON, YAML, or properties files.
Example 1: log4j2.xml Configuration
A basic log4j2.xml configuration example:
<span class="hljs-meta"><?xml version=<span class="hljs-string">"1.0"</span> encoding=<span class="hljs-string">"UTF-8"</span>?></span>
<span class="hljs-tag"><<span class="hljs-name">Configuration</span> <span class="hljs-attr">status</span>=<span class="hljs-string">"WARN"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">Appenders</span>></span>
<span class="hljs-comment"><!-- Console Appender --></span>
<span class="hljs-tag"><<span class="hljs-name">Console</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"Console"</span> <span class="hljs-attr">target</span>=<span class="hljs-string">"SYSTEM_OUT"</span>></span>
<code class="!whitespace-pre language-xml"> <span class="hljs-tag"><<span class="hljs-name">PatternLayout</span> <span class="hljs-attr">pattern</span>=<span class="hljs-string">"%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">Console</span>></span><!– File Appender –> <span class="hljs-tag"><<span class="hljs-name">File</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"File"</span> <span class="hljs-attr">fileName</span>=<span class="hljs-string">"logs/app.log"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">PatternLayout</span> <span class="hljs-attr">pattern</span>=<span class="hljs-string">"%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">File</span>></span>
<span class="hljs-tag"></<span class="hljs-name">Appenders</span>></span>
<span class="hljs-tag"><<span class="hljs-name">Loggers</span>></span>
<span class="hljs-comment"><!-- Root Logger --></span>
<span class="hljs-tag"><<span class="hljs-name">Root</span> <span class="hljs-attr">level</span>=<span class="hljs-string">"debug"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">AppenderRef</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">"Console"</span>/></span>
<span class="hljs-tag"><<span class="hljs-name">AppenderRef</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">"File"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">Root</span>></span>
<span class="hljs-comment"><!-- Logger for specific class --></span>
<span class="hljs-tag"><<span class="hljs-name">Logger</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"com.example"</span> <span class="hljs-attr">level</span>=<span class="hljs-string">"info"</span> <span class="hljs-attr">additivity</span>=<span class="hljs-string">"false"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">AppenderRef</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">"File"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">Logger</span>></span>
<span class="hljs-tag"></<span class="hljs-name">Loggers</span>></span>
<span class="hljs-tag"></<span class="hljs-name">Configuration</span>></span>
Explanation
- Appenders: These define the output locations for logs (console, file, etc.).
Console: Output logs to the console.File: Output logs to a file (e.g.,logs/app.log).
- Loggers: These define logging configurations for specific loggers.
Root: Defines the root logger, which catches logs for the entire application.Logger: Defines specific loggers for individual packages or classes.
- Log Level: Levels like
debug,info,warn,error,fatal, etc., control the verbosity of the logs.
Example 2: log4j2.json Configuration
A log4j2.json configuration example:
<span class="hljs-punctuation">{</span>
<span class="hljs-attr">"configuration"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"status"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"WARN"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"appenders"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"console"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Console"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"target"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"SYSTEM_OUT"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"PatternLayout"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"pattern"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n"</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"file"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"File"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"fileName"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"logs/app.log"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"PatternLayout"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"pattern"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n"</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"loggers"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"root"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"level"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"debug"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"AppenderRef"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
<span class="hljs-punctuation">{</span> <span class="hljs-attr">"ref"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Console"</span> <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>
<span class="hljs-punctuation">{</span> <span class="hljs-attr">"ref"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"File"</span> <span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"logger"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"com.example"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"level"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"info"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"additivity"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"AppenderRef"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> <span class="hljs-attr">"ref"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"File"</span> <span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>Example 3: log4j2.yml Configuration
A log4j2.yml configuration example:
<span class="hljs-attr">Configuration:</span>
<span class="hljs-attr">status:</span> <span class="hljs-string">WARN</span>
<span class="hljs-attr">appenders:</span>
<span class="hljs-attr">Console:</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">Console</span>
<span class="hljs-attr">target:</span> <span class="hljs-string">SYSTEM_OUT</span>
<span class="hljs-attr">PatternLayout:</span>
<span class="hljs-attr">pattern:</span> <span class="hljs-string">"%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n"</span>
<span class="hljs-attr">File:</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">File</span>
<span class="hljs-attr">fileName:</span> <span class="hljs-string">logs/app.log</span>
<span class="hljs-attr">PatternLayout:</span>
<span class="hljs-attr">pattern:</span> <span class="hljs-string">"%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n"</span>
<span class="hljs-attr">loggers:</span>
<span class="hljs-attr">root:</span>
<span class="hljs-attr">level:</span> <span class="hljs-string">debug</span>
<span class="hljs-attr">AppenderRef:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">ref:</span> <span class="hljs-string">Console</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">ref:</span> <span class="hljs-string">File</span>
<span class="hljs-attr">logger:</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">com.example</span>
<span class="hljs-attr">level:</span> <span class="hljs-string">info</span>
<span class="hljs-attr">additivity:</span> <span class="hljs-literal">false</span>
<span class="hljs-attr">AppenderRef:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">ref:</span> <span class="hljs-string">File</span>
Example 4: log4j2.properties Configuration
A log4j2.properties configuration example:
status = warn
name = PropertiesConfig
# Console Appender
appender.console.type = Console
appender.console.name = Console
appender.console.Target = SYSTEM_OUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
# File Appender
appender.file.type = File
appender.file.name = File
appender.file.fileName = logs/app.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
# Root Logger
rootLogger.level = debug
rootLogger.appenderRef.console.ref = Console
rootLogger.appenderRef.file.ref = File
# Logger for com.example package
logger.com.example.name = com.example
logger.com.example.level = info
logger.com.example.additivity = false
logger.com.example.appenderRef.file.ref = File
Key Points
- Appenders define where the log data goes (e.g., console, file).
- Loggers define which parts of your code (e.g., root logger or specific packages/classes) will produce logs and at what levels.
- Log Levels control the severity of the messages that are logged (e.g.,
debug,info,warn,error).
You can choose whichever format (XML, JSON, YAML, or properties) fits your project best.