基礎內容
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:
