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: