依賴jar:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.9.1</version> </dependency>
在log4j2中配置文件可以為.xml,.json或者.jsn,默認情況下,系統選擇configuration文件的優先級如下:
- log4j-test.json或者log4j-test.jsn
- log4j2-test.xml
- log4j.json或者log4j.jsn
- log4j2.xml
日志級別 從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低於WARN的信息都不會輸出。
Appender 為日志輸出目的地,常用的三種
- Console:將輸出到控制台
- File:將結果輸出到一個指定文件中。
- RollingFile:和File一樣,RollingFile則較為靈活,可以按照文件大小拆分文件
PatternLayout 控制輸出內容的節點,包括類名、時間、行號、日志級別、序號等都可以控制,同時還可以指定日志格式,可以使用正則表達式處理輸出結果。用\\輸出\,用%%輸出%
%c,%c{參數},%C{參數},%class{參數}:輸出類名稱
%c | org.apache.com.te.Foo | org.apache.com.te.Foo |
%c{1} | org.apache.com.te.Foo | Foo |
%c{2} | org.apache.com.te.Foo | te.Foo |
%c{1.} | org.apache.com.te.Foo | o.a.c.t.Foo |
%c{1.1.!} | org.apache.com.te.Foo | o.a.!.!.Foo |
%c{.} | org.apache.com.te.Foo | ….Foo |
%d{參數}:輸出時間。參數可以是text.SimpleDateFormat字符拼接而成,也可以使用系統默認
%d{DEFAULT} | 2012-11-02 14:34:02,781 |
%d{ISO8601} | 2012-11-02T14:34:02,781 |
%d{ISO8601_BASIC} | 20121102T143402,781 |
%d{ABSOLUTE} | 14:34:02,781 |
%d{DATE} | 02 Nov 2012 14:34:02,781 |
%d{COMPACT} | 20121102143402781 |
%d{HH:mm:ss,SSS} | 14:34:02,781 |
%d{dd MMM yyyy HH:mm:ss,SSS} | 02 Nov 2012 14:34:02,781 |
%d{HH:mm:ss}{GMT+0} | 18:34:02 |
%d{UNIX} | 1351866842 |
%d{UNIX_MILLIS} | 1351866842781 |
%l 和 %L:輸出行號,%l 輸出完整的包路徑及行號,%L 僅輸出行號。此參數影響日志輸出性能
%m或%msg或%message:輸出日志信息
%M或%method:輸出方法名
%level{參數1}:不寫參數時,輸出日志級別。第一個參數用來替換日志信息的級別,格式為:{level=label, level=label, …},即使用label代替的字符串替換level,例如 %level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I},則logger.warn輸出W等等
log4j2.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?> <configuration status="debug"> <!-- 變量配置 --> <Properties> <Property name="root_path">${sys:catalina.home}</Property> </Properties> <!--先定義所有的appender --> <appenders> <!--這個輸出控制台的配置 --> <Console name="Console" target="SYSTEM_OUT"> <!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) --> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <!--這個都知道是輸出日志的格式 --> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %c %L %M - %msg%xEx%n"/> </Console> <!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用 --> <!--append為TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內容,默認值是true --> <File name="log" fileName="${root_path}/logs/logdemo.log" append="true"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %c %L %M - %msg%xEx%n"/> </File> <!--添加過濾器ThresholdFilter,可以有選擇的輸出某個級別以上的類別 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否則直接拒絕 --> <File name="ERROR" fileName="${sys:catalina.home}/logs/logdemo_error.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!--這個會打印出所有的信息,每次大小超過size,則這size大小的日志會自動存入按年-月-日建立的文件夾下面並進行壓縮,作為存檔 --> <RollingFile name="RollingFile" fileName="${sys:catalina.home}/logs/logdemo_web.log" filePattern="${sys:catalina.home}/logs/$${date:yyyy-MM-dd}/logdemo_web-%d{yyyy-MM-dd}-%i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <!-- 設置日志文件大小超過多少后開始進行壓縮 單位:KB/MB/GB --> <SizeBasedTriggeringPolicy size="10MB"/> <!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件,超過后則會覆蓋之前的,這里設置了20 --> <DefaultRolloverStrategy max="20"/> </RollingFile> <!--每分鍾產生一個文件,歷史的日志會自動存入按年-月-日建立的文件夾下面並進行壓縮,作為存檔 --> <RollingFile name="DailyRollingFile" fileName="${sys:catalina.home}/logs/logdemo_all.log" filePattern="${sys:catalina.home}/logs/$${date:yyyy-MM-dd}/logdemo_all-%d{yyyy-MM-dd_HH-mm}-%i.log"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </RollingFile> </appenders> <!--然后定義logger,只有定義了logger並引入的appender,appender才會生效 --> <loggers> <!--建立一個默認的root的logger,只有能一個root --> <root level="debug"> <appender-ref ref="RollingFile"/> <appender-ref ref="Console"/> <appender-ref ref="ERROR" /> <appender-ref ref="log"/> </root> <!-- 設置指定包輸出指定的日志級別 --> <logger name="com.gavin" level="warn"/> </loggers> </configuration>