Log4j2 XML 配置示例

Apache Log4j2是对 Log4j 1.x 的升级,与其前身相比提供了重大改进,例如性能改进、修改后的配置文件的自动重新加载、Java 8 lambda支持和自定义日志级别。

Log4j 2.4 及更高版本需要 Java 7。版本 2.0-alpha1 到 2.3 需要 Java 6。

1. Log4j2 Maven 依赖

要在项目中包含Log4j2,请包含以下 maven 依赖项。

pom.xml
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.6.1</version>
</dependency>

2. Log4j2.xml – 控制台日志

您可以使用以下log4j2.xml文件将输出记录到控制台。请注意,如果找不到配置文件,DefaultConfiguration则将使用。这也会导致日志输出进入控制台。

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout
                pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="debug" additivity="false">
            <AppenderRef ref="console" />
        </Root>
    </Loggers>
</Configuration>

3. Log4j2.xml – 滚动文件追加器

您可以使用以下log4j2.xml文件将输出记录到基于日期的滚动文件中 - 以及控制台。

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Properties>
        <Property name="basePath">C:\\logs</Property>
    </Properties>
 
    <Appenders>
        <RollingFile name="fileLogger" fileName="${basePath}/app-info.log" filePattern="${basePath}/app-info-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
 
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout   pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="com.howtodoinjava" level="debug" additivity="true">
            <appender-ref ref="fileLogger" level="debug" />
        </Logger>
        <Root level="debug" additivity="false">
            <appender-ref ref="console" />
        </Root>
    </Loggers>
</Configuration>

4. Log4j2.xml – 多文件追加器

使用这个简单log4j2.xml来快速参考多个日志文件中的日志语句。它记录不同级别的日志(debuginfo等等),以不同的文件,使用LevelRangeFilter,让您的日志干净,分隔,便于分析。

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
 
    <!-- Logging Properties -->
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
        <Property name="APP_LOG_ROOT">c:/temp</Property>
    </Properties>
     
    <Appenders>
     
        <!-- Console Appender -->
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
         
        <!-- File Appenders on need basis -->
        <RollingFile name="frameworkLog" fileName="${APP_LOG_ROOT}/app-framework.log"
            filePattern="${APP_LOG_ROOT}/app-framework-%d{yyyy-MM-dd}-%i.log">
            <LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
         
        <RollingFile name="debugLog" fileName="${APP_LOG_ROOT}/app-debug.log"
            filePattern="${APP_LOG_ROOT}/app-debug-%d{yyyy-MM-dd}-%i.log">
            <LevelRangeFilter minLevel="DEBUG" maxLevel="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
         
        <RollingFile name="infoLog" fileName="${APP_LOG_ROOT}/app-info.log"
            filePattern="${APP_LOG_ROOT}/app-info-%d{yyyy-MM-dd}-%i.log" >
            <LevelRangeFilter minLevel="INFO" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
         
        <RollingFile name="errorLog" fileName="${APP_LOG_ROOT}/app-error.log"
            filePattern="${APP_LOG_ROOT}/app-error-%d{yyyy-MM-dd}-%i.log" >
            <LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
         
        <RollingFile name="perfLog" fileName="${APP_LOG_ROOT}/app-perf.log"
            filePattern="${APP_LOG_ROOT}/app-perf-%d{yyyy-MM-dd}-%i.log" >
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="1"/>
        </RollingFile>
         
        <RollingFile name="traceLog" fileName="${APP_LOG_ROOT}/app-trace.log"
            filePattern="${APP_LOG_ROOT}/app-trace-%d{yyyy-MM-dd}-%i.log" >
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="1"/>
        </RollingFile>
         
    </Appenders>
 
    <Loggers>
     
        <Logger name="com.howtodoinjava.app.somePackage" additivity="false" level="trace">
            <AppenderRef ref="traceLog" />
            <AppenderRef ref="Console" />
        </Logger>
         
        <Logger name="com.howtodoinjava.app" additivity="false" level="debug">
            <AppenderRef ref="debugLog" />
            <AppenderRef ref="infoLog"  />
            <AppenderRef ref="errorLog" />
            <AppenderRef ref="Console"  />
        </Logger>
         
        <Logger name="org.framework.package" additivity="false" level="info">
            <AppenderRef ref="perfLog" />
            <AppenderRef ref="Console"/>
        </Logger>
                 
        <Root level="warn">
            <AppenderRef ref="Console"/>
        </Root>
 
    </Loggers>
 
</Configuration>

5. Log4j2.xml 文件位置

您应该将其log4j2.xml放在应用程序的类路径中的任何位置。Log4j 将扫描所有类路径位置以找出此文件,然后加载它。

Log4j2.xml 文件位置

Log4j2.xml 文件位置

6. 演示

让我们编写一个 java 类并编写一些日志语句来验证日志是否也在控制台和日志文件中显示。它将不同的日志级别记录到不同的日志

package com.howtodoinjava.log4j2.examples;
 
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
 
public class Log4j2HelloWorldExample
{
    private static final Logger LOGGER = LogManager.getLogger(Log4j2HelloWorldExample.class.getName());
     
    public static void main(String[] args)
    {
        LOGGER.debug("Debug Message Logged !!!");
        LOGGER.info("Info Message Logged !!!");
        LOGGER.error("Error Message Logged !!!", new NullPointerException("NullError"));
    }
}

现在,当您运行上述程序时,您将在控制台中获得以下日志。

[DEBUG] 2016-06-16 12:17:42.972 [main] Log4j2HelloWorldExample - 记录调试消息!!!
[INFO] 2016-06-16 12:17:42.996 [main] Log4j2HelloWorldExample - 信息消息记录!!!
[错误] 2016-06-16 12:17:42.997 [main] Log4j2HelloWorldExample - 记录错误信息!!!
java.lang.NullPointerException: NullError
    在 com.howtodoinjava.log4j2.examples.Log4j2HelloWorldExample.main(Log4j2HelloWorldExample.java:14) [classes/:?]

如果更改系统的日期和再次运行应用程序,你会发现在配置位置即两个日志文件app-info.logapp-info-2016-06-15.log-在第二个文件是翻了个身文件。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值