File Appender in XML (Log4j 2.x)
A File Appender is used in logging frameworks (like Log4j) to write log messages to a file. In Log4j, this can be configured in an XML
configuration file, allowing logs to be directed to a specific file on the system.
Example of File Appender in XML (Log4j 2.x):
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <!-- Define a File Appender --> <File name="FileAppender" fileName="logs/app-log.log"> <!-- Set the log pattern (log message format) --> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Pattern> </PatternLayout> </File> </Appenders> <!-- Loggers Section --> <Loggers> <!-- Root logger (applies to all loggers) --> <Root level="info"> <AppenderRef ref="FileAppender"/> </Root> </Loggers> </Configuration>
Key Elements in the XML Configuration:
- <Appenders>: Defines where log messages will be sent. In this case, a
File
appender is used to write logs to a file. - <File>:
name="FileAppender"
: A unique name for the appender.fileName="logs/app-log.log"
: The path to the file where logs will be written.
- <PatternLayout>: Defines the format of the log message.
%d
: Timestamp.[%t]
: Thread name.%-5level
: Log level (INFO, WARN, ERROR, etc.).%logger{36}
: Logger name (up to 36 characters).%msg%n
: The actual log message followed by a new line.
- <Loggers>: Defines which loggers will use the file appender.
<Root>
: The root logger applies to all loggers unless explicitly specified otherwise.<AppenderRef ref="FileAppender"/>
: Tells Log4j to use theFileAppender
.
Rolling File Appender Configuration:
You can also use a Rolling File Appender if you want the log file to "roll over" after reaching a certain size or based on time intervals.
Example of RollingFile Appender:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <!-- Rolling File Appender to roll logs based on size --> <RollingFile name="RollingFileAppender" fileName="logs/app-log.log" filePattern="logs/app-log-%d{yyyy-MM-dd}-%i.log.gz"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <DefaultRolloverStrategy max="7"/> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="RollingFileAppender"/> </Root> </Loggers> </Configuration>
Explanation:
- RollingFile: Similar to
File
, but supports rolling log files. - filePattern: Specifies how the log file names will be formatted after rolling (e.g., including date and an index).
- TimeBasedTriggeringPolicy: Rolls logs based on time (e.g., daily).
- SizeBasedTriggeringPolicy size="10MB": Rolls logs when they reach 10 MB in size.
- DefaultRolloverStrategy max="7": Retains up to 7 old log files.
Common Log4j Patterns in <PatternLayout>
:
%d{ISO8601}
: Date in ISO8601 format.%p
: Log level (INFO, DEBUG, ERROR, etc.).%m
: The log message.%n
: Newline character.%c{1}
: Logger name (only the first part of the logger name).