log4j簡(jiǎn)介
log4j是java常見(jiàn)的日志輸出框架,
2015年5月,Apache宣布Log4J 1.x 停止更新僧家。最新版為1.2.17谦炒。
如今刚梭,Log4J 2.x已更新至2.11巡球。
官方網(wǎng)址:http://logging.apache.org/log4j/2.x/
配置文件介紹
日志級(jí)別
trace:追蹤,就是程序推進(jìn)一下邦投,可以寫(xiě)個(gè)trace輸出
debug:調(diào)試,一般作為最低級(jí)別擅笔,trace基本不用志衣。
info:輸出重要的信息,使用較多
warn:警告猛们,有些信息不是錯(cuò)誤信息念脯,但也要給程序員一些提示。
error:錯(cuò)誤信息弯淘。用的也很多绿店。
fatal:致命錯(cuò)誤。級(jí)別較高庐橙,這種級(jí)別不用調(diào)試了假勿,重寫(xiě)吧……
機(jī)制:如果一條日志信息的級(jí)別大于等于配置文件的級(jí)別,就記錄态鳖。
輸出源
CONSOLE(輸出到控制臺(tái))转培、FILE(輸出到文件)等。
布局方式
SimpleLayout:以簡(jiǎn)單的形式顯示
HTMLLayout:以HTML表格顯示
PatternLayout:自定義形式顯示
在Log4J2中基本采用PatternLayout自定義日志布局浆竭。
自定義格式:
%t:線程名稱
%p:日志級(jí)別
%c:日志消息所在類名
%m:消息內(nèi)容
%M:輸出執(zhí)行方法
%d:發(fā)生時(shí)間浸须,%d{yyyy-MM-dd HH:mm:ss,SSS}惨寿,輸出類似:2011-10-18 22:10:28,921
%x: 輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應(yīng)用中。
%L:代碼中的行數(shù)
%n:換行
maven pom.xml引入包
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.1.6.RELEASE</spring.version>
<log4j.version>2.11.0</log4j.version>
<activiti.version>6.0.0</activiti.version>
</properties>
<!-- 日志:Log4j2 + Slf4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 橋接:告訴Slf4j使用Log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 橋接:告訴commons logging使用Log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
log4j2.xml文件
2.x版本不支持properties格式删窒,使用xml或者json或者yaml裂垦, log4j2xml 添加src/main/resources 目錄
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<Properties>
<!-- 配置日志文件輸出目錄,此配置將日志輸出到tomcat根目錄下的指定文件夾 -->
<Property name="LOG_HOME">${sys:catalina.home}/logs</Property>
</Properties>
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<!--只接受程序中DEBUG級(jí)別的日志進(jìn)行處理-->
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!--處理DEBUG級(jí)別的日志肌索,并把該日志放到logs/debug.log文件中-->
<!--打印出DEBUG級(jí)別日志蕉拢,每次大小超過(guò)size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮驶社,作為存檔-->
<RollingFile name="RollingFileDebug" fileName="${LOG_HOME}/platform-debug.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/platform-debug-%d{yyyy-MM-dd}-%i.log.gz">
<Filters>
<ThresholdFilter level="DEBUG"/>
<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout
pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<!--處理INFO級(jí)別的日志企量,并把該日志放到logs/info.log文件中-->
<RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/platform-info.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/platform-info-%d{yyyy-MM-dd}-%i.log.gz">
<Filters>
<!--只接受INFO級(jí)別的日志,其余的全部拒絕處理-->
<ThresholdFilter level="INFO"/>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout
pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<!--處理WARN級(jí)別的日志亡电,并把該日志放到logs/warn.log文件中-->
<RollingFile name="RollingFileWarn" fileName="${LOG_HOME}/platform-warn.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/platform-warn-%d{yyyy-MM-dd}-%i.log.gz">
<Filters>
<ThresholdFilter level="WARN"/>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout
pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<!--處理error級(jí)別的日志届巩,并把該日志放到logs/error.log文件中-->
<RollingFile name="RollingFileError" fileName="${LOG_HOME}/platform-error.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/platform-error-%d{yyyy-MM-dd}-%i.log.gz">
<ThresholdFilter level="ERROR"/>
<PatternLayout
pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<!--druid的日志記錄追加器-->
<RollingFile name="druidSqlRollingFile" fileName="${LOG_HOME}/platform-druid-sql.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/platform-druid-sql-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %L %M - %msg%xEx%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<root level="DEBUG">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
<appender-ref ref="RollingFileDebug"/>
</root>
<!--記錄druid-sql的記錄-->
<logger name="druid.sql.Statement" level="debug" additivity="false">
<appender-ref ref="druidSqlRollingFile"/>
</logger>
<!--log4j2 自帶過(guò)濾日志-->
<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
<Logger name="org.crsh.plugin" level="warn" />
<logger name="org.crsh.ssh" level="warn"/>
<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
<logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
</loggers>
</configuration>