1、前言
log4j是一個用Java編寫的可靠,快速且靈活的日誌框架(API),它在Apache軟體許可下發布。 Log4j已經移植到了C,C++,C#,Perl,Python和Ruby等語言。
Log4j是高度可配置的,並可透過在運行時的外部檔案進行配置。它根據記錄的優先級別,並提供機制,以指示記錄資訊到許多的目的地,例如:資料庫,文件,控制台,UNIX系統日誌等。
Log4j中有三個主要組成部分:
loggers: 負責擷取記錄資訊。
appenders : 負責發布日誌訊息,以不同的首選目的地。
layouts: 負責格式化不同風格的日誌資訊。
注意:本文是基於log4j 2.X以上版本。
2、安裝
log4j-core-xx.jar
log4j-api-xx.jar
log4j-api-xx.jar
log4j-web-web日誌的類別添加如下引用:import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
static Logger logger = LogManager.getLogger(Test.class.getName());
<?xml version="1.0" encoding="UTF-8"?> <configuration status="error"> <!--先定义所有的appender--> <appenders> <!--这个输出控制台的配置--> <Console name="Console" target="SYSTEM_OUT"> <!--这个是输出日志的格式--> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </Console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用--> <File name="Error" fileName="${web:rootDir}/logs/error.log" append="false"> <!--文件只记录level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout charset="UTF-8" pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFile" fileName="${web:rootDir}/logs/history.log" filePattern="log/$${date:yyyy-MM}/history-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout charset="UTF-8" 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="Error"/> <appender-ref ref="RollingFile"/> <appender-ref ref="Console"/> </root> </loggers> </configuration>
<!-- log4j2.x start --> <listener> <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> </listener> <filter> <filter-name>log4jServletFilter</filter-name> <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class> </filter> <filter-mapping> <filter-name>log4jServletFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- log4j2.x end -->