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.