java开发-log4j2配置使用

基础内容

Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。

 

代码部分

S1.添加到项目

下载log4j2 jar包

https://logging.apache.org/log4j/2.x/download.html

添加log4j-api-2.9.0.jar/log4j-core-2.9.0.jar包到工程libs目录,add as library;

S2. 配置log4j2

src目录下新建log4j2.xml并配置;

一个完整的配置示例:

<?xml version="1.0" encoding="UTF-8"?>

<configuration status="error">

    <!--先定义所有的appender-->

    <appenders>

        <!--这个输出控制台的配置-->

        <Console name="Console" target="SYSTEM_OUT">

            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->

            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>

            <!--这个都知道是输出日志的格式-->

            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>

        </Console>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->

        <File name="log" fileName="log/test.log" append="false">

            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>

        </File>

 

        <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->

        <RollingFile name="RollingFile" fileName="logs/app.log"

                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">

            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>

            <SizeBasedTriggeringPolicy size="50MB"/>

        </RollingFile>

    </appenders>

    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->

    <loggers>

        <!--建立一个默认的root的logger-->

        <root level="trace">

            <appender-ref ref="RollingFile"/>

            <appender-ref ref="Console"/>

        </root>

    </loggers>

</configuration>

 

 

 

S3.使用

//官方提供的示例

//java

package com.example;

 

import org.apache.logging.log4j.Logger;

import org.apache.logging.log4j.LogManager;

 

public class Example {

    private static final Logger LOGGER = LogManager.getLogger();

 

    public static void main(String... args) {

        String thing = args.length > 0 ? args[0] : "world";

        LOGGER.info("Hello, {}!", thing);

        LOGGER.debug("Got calculated value only if debug enabled: {}", () -> doSomeCalculation());

    }

 

    private static Object doSomeCalculation() {

        // do some complicated calculation

    }

}

// 配置规则

<?xml version="1.0" encoding="UTF-8"?>

<Configuration>

  <Appenders>

    <Console name="Console" target="SYSTEM_OUT">

      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>

    </Console>

  </Appenders>

  <Loggers>

    <Logger name="com.example" level="INFO"/>

    <Root level="error">

      <AppenderRef ref="Console"/>

    </Root>

  </Loggers>

</Configuration>

 

 

//示例2

Logger logger = LogManager.getLogger(xxx.class.getName() + ".class");

        logger.trace("我是trace信息");

        logger.debug("我是debug信息");

        logger.info("我是info信息");    //info级别的信息

        logger.warn("我是warn信息");

        logger.error("Did it again!");   //error级别的信息,参数就是你输出的信息

        logger.fatal("我是fatal信息");

 

 

Ref:

1. https://github.com/apache/logging-log4j2

2.http://blog.csdn.net/lu8000/article/details/25754415

posted @ 2017-09-19 00:26  zhen-Android  阅读(6099)  评论(0编辑  收藏  举报