Log4j2
Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor
Table of contents
環境搭建
一般java工程:
下載
apache官網給的鏈接是清華鏡像網站的,國外的很多開源的在國內太慢的話不妨嘗試一下國內的最大鏡像站清華鏡像站,下載地址log4j-2.11.0,
配置到環境
To use Log4j 2 in your application make sure that both the API and Core jars are in the application’s classpath. Add the dependencies listed below to your classpath. -----這是官網的原話,翻譯過來就是,使用log4j2的方式是,將接口jar和實現jar放到所需項目的classpath中,並添加依賴,具體就是log4j-api-2.11.0.jar和log4j-core-2.11.0.jar
配置文件路徑
log4j2.xml可以放在任意的地方,只要你最后把它放到了classpath里,上面的項目中新建一個resources目錄用於放置log4j2.xml,如果在未加入classpath時嘗試運行時會報如下錯誤:
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See <https://logging.apache.org/log4j/2.x/manual/configuration.html> for instructions on how to configure Log4j 2
大義就是運行的項目沒有在classpath 中找到你的配置文件
以Eclipse環境為例,可以在Run—Run Configurations對應項目的Classpath中選擇User Entries,點擊Advanced,選擇Add Folder,把resources文件夾添加進來。
idea環境
熟悉idea的話點擊右上方放大鏡圖標左側的圖標
再點擊左側邊欄Project Settings下的Modules
擴展一下,點了之后,右側邊欄區域
表示的是已作為classpath的文件夾,這里可以從已設置為classpath的文件夾中取消選擇,
取消掉以后記得按下下方的apply保存一下
選中右側出現的工程目錄中你用來存放配置文件log4j2.xml中的文件夾,點擊一下選中,再點擊resource,右側邊欄就會多出一下你選中的文件,點下方的apply即可
配置詳解
<?xml version="1.0" encoding="UTF-8"?>
<!-- monitorInterval,配置為120,單位為秒。即在服務運行過程中發生了log4j2配置文件的修改,log4j2能夠在monitorInterval時間范圍重新加載配置,無需重啟應用。-->
<Configuration status="WARN" monitorInterval="120">
<properties>
<!--當輸出到文件中的時候使用LOG_HOME替代輸出到的文件夾,類似於配置java環境的時候的JAVA_HOME的做法-->
<!--最好是填寫相對路徑,基路徑是當前項目也就是src的上一級別-->
<!--如果寫成testlog/mylog,即使沒有testlog,也會在src同級目錄下新建出testlog文件夾以及其下的mylog文件夾-->
<property name="LOG_HOME">testlog/mylog</property>
</properties>
<!--翻譯:附加器,記錄方式-->
<Appenders>
<!--appenders里的兩個屬性,分別為name=Console和name=log(兩個名字是自己起的)-->
<!--appenders屬性同級的loggers中的root的level的值控制輸出信息的嚴格級別,一般是info-->
<!--root中的AppenderRef的ref寫appenders中的name,在這里也就是添Console或log-->
<!--name是自己命名的,target=SYSTEM_OUT表示輸出到控制台-->
<Console name="Console" target="SYSTEM_OUT">
<!--pattern控制格式化輸出的格式-->
<!--例子:在代碼中寫入logger.info("info級別信息");-->
<!--輸出:12:8:34.501 [main] INFO com.selton.Log4jTest - info級別信息-->
<PatternLayout pattern="%d{H:m:s.S} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!--臨時日志生成-->
<!--<File name="log" fileName="log/test.log" append="true">
<PatternLayout pattern="%d{H:m:s.S} [%t] %-5level %logger{36} - %msg%n"/>
</File>-->
<!--fileName:日志存儲路徑,
filePattern:歷史日志封存路徑。其中%d{yyyyMMddHH}表示了封存歷史日志的時間單位(目前單位為小時,yyyy表示年,MM表示月,dd表示天,HH表示小時,mm表示分鍾,ss表示秒,SS表示毫秒)。
注意后綴,log4j2自動識別zip等后綴,表示歷史日志需要壓縮。-->
<RollingRandomAccessFile name="File" immediateFlush="true" fileName="${LOG_HOME}/today.log"
filePattern="${LOG_HOME}/history-%d{yyyy-MM-dd}.log">
<!-- level,表示最低接受的日志級別,配置為INFO,即我們期望打印INFO級別以上的日志。-->
<!--onMatch,表示當日志事件的日志級別與level一致時,應怎么做。一般為ACCEPT,表示接受。-->
<!--onMismatch,表示日志事件的日志級別與level不一致時,應怎么做。一般為DENY,表示拒絕。也可以為NEUTRAL表示中立。-->
<Filters>
<!--最下方的Root level="debug",如果不設置這句的話,4個級別信息都會打印,設置后,就會只打印INFO以及之上-->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!--輸出到文件夾中去-->
<PatternLayout pattern="%d{y-M-d H:m:s.S} [%t] %-5level %logger{36} - %msg%n" />
<!--<HTMLLayout pattern="%d{y-M-d H:m:s.S} [%t] %-5level %logger{36} - %msg%n" />-->
<!--必配項,TriggeringPolicy(觸發策略) -->
<Policies>
<!--按天,划分日志文件-->
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
<!--必配項,RolloverStrategy(覆蓋策略)-->
<!--<DefaultRolloverStrategy max="20"/>-->
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>