slf4j+log4j2的整合配置
Log4j 2是log4j 1.x和logback的改進(jìn)版,據(jù)說(shuō)采用了一些新技術(shù)(無(wú)鎖異步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解決了一些死鎖的bug,而且配置更加簡(jiǎn)單靈活。下面是結(jié)合slf4j的配置和使用過(guò)程:
1、引用依賴(lài)包及相關(guān)注釋:- 1
- 26
**注:**log4j-api-2.x 和 log4j-core-2.x是必須的,其他包根據(jù)需要引入,如下圖所示:
2、代碼中使用:
@RunWith(SpringJUnit4ClassRunner.class) //使用Spring Junit4進(jìn)行測(cè)試 @ContextConfiguration ({"classpath:spring/applicationContext.xml"}) //加載配置文件 public abstract class BaseJunit4Test { }import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; mport com.xjj.test.BaseJunit4Test; public class Log4j2Test extends BaseJunit4Test {static public Logger logger = LoggerFactory.getLogger(Log4j2Test.class); @Testpublic void logTC1(){logger.error("error");logger.debug("debug");logger.info("info");logger.trace("trace");logger.warn("warn");logger.error("error {}", "param");} }- 78101112131415161711920222
輸出結(jié)果:
16:19:28.779 [main] ERROR com.xjj.test.mytest.Log4j2Test - error 16:19:28.781 [main] ERROR com.xjj.test.mytest.Log4j2Test - error param- 1
注:如果沒(méi)有任何配置,Log4j2會(huì)使用缺省配置:
root logger:ConsoleAppender PatternLayout:"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"- 1
級(jí)別:ERROR
3、配置(使用xml配置文件):
官網(wǎng)配置指南:http://logging.apache.org/log4j/2.x/manual/configuration.html
在classpath中創(chuàng)建名字為log4j2.xml的配置文件。
Configuration標(biāo)簽中的常用元素說(shuō)明:
monitorInterval:Log4j 2 定期檢查和應(yīng)用配置文件的時(shí)間間隔(單位:秒,如果更改配置文件,不用重啟系統(tǒng))。
status:Log4j內(nèi)部事件記錄的等級(jí),只對(duì)Log4j本身的事件有效。
strict:是否使用XML Schema來(lái)檢查配置文件。
schema:Shema文件的位置。
例子:
- 13
Loggers標(biāo)簽說(shuō)明:
它被用來(lái)配置LoggerConfig,包含一個(gè)root logger和若干個(gè)普通logger
普通必須有一個(gè)name元素,root logger不用name元素
每個(gè)logger可以指定一個(gè)level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定時(shí)level默認(rèn)為ERROR
additivity指定是否同時(shí)輸出log到父類(lèi)的appender,缺省為true。(層級(jí)關(guān)系與Java包類(lèi)似,例如:com.foo是com.foo.Bar的父級(jí);java是java.util的父級(jí),是java.util.vector的祖先。root是最頂層。)
每個(gè)logger可以包含若干個(gè)屬性:AppenderRef, Filter, Layout, 等
例子:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
Filters標(biāo)簽說(shuō)明:
與防火墻過(guò)濾的規(guī)則相似,log4j2的過(guò)濾器也將返回三類(lèi)狀態(tài):Accept(接受), Deny(拒絕) 或Neutral(中立)。其中,Accept意味著不用再調(diào)用其他過(guò)濾器了,這個(gè)LogEvent將被執(zhí)行;Deny意味著馬上忽略這個(gè)event,并將此event的控制權(quán)交還給過(guò)濾器的調(diào)用者;Neutral則意味著這個(gè)event應(yīng)該傳遞給別的過(guò)濾器,如果再?zèng)]有別的過(guò)濾器可以傳遞了,那么就由現(xiàn)在這個(gè)過(guò)濾器來(lái)處理。
Appenders標(biāo)簽說(shuō)明:
Appender用來(lái)定義不同的輸出位置,可以是console、文件、遠(yuǎn)程socket服務(wù)器、Apache Flume、JMS以及遠(yuǎn)程 UNIX 系統(tǒng)日志守護(hù)進(jìn)程。一個(gè)Logger可以綁定多個(gè)不同的Appender。
Layout/PatternLayout:
定義log的格式(一種類(lèi)似C語(yǔ)言printf函數(shù)的打印格式)。
配置例子和注解如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <!-- Log4j 2.x 配置文件。每30秒自動(dòng)檢查和應(yīng)用配置文件的更新; --> <Configuration status="warn" monitorInterval="30" strict="true" schema="Log4J-V2.2.xsd"><Appenders><!-- 輸出到控制臺(tái) --><Console name="Console" target="SYSTEM_OUT"><!-- 需要記錄的級(jí)別 --><!-- <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> --><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" /></Console><!-- 輸出到文件,按天或者超過(guò)80MB分割 --><RollingFile name="RollingFile" fileName="../logs/xjj.log" filePattern="../logs/$${date:yyyy-MM}/xjj-%d{yyyy-MM-dd}-%i.log.gz"><!-- 需要記錄的級(jí)別 --><!-- <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" /> --><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" /><Policies><OnStartupTriggeringPolicy /><TimeBasedTriggeringPolicy /><SizeBasedTriggeringPolicy size="80 MB" /></Policies></RollingFile></Appenders><Loggers><Root level="info"> <!-- 全局配置 --><AppenderRef ref="Console" /><AppenderRef ref="RollingFile"/></Root><!-- 為sql語(yǔ)句配置特殊的Log級(jí)別,方便調(diào)試 --><Logger name="com.xjj.dao" level="${log.sql.level}" additivity="false"><AppenderRef ref="Console" /></Logger></Loggers> </Configuration>- 3
實(shí)際使用的例子(用slf4j接口):
import org.slf4j.Logger; import org.slf4j.LoggerFactory;private final static Logger logger = LoggerFactory.getLogger(MyClass.class); try {…… } catch (Exception e) {logger.error("發(fā)生了異常:", e); } logger.info("請(qǐng)求處理結(jié)束,耗時(shí):{}毫秒", (System.currentTimeMillis() - beginTime)); //第一種用法 logger.info("請(qǐng)求處理結(jié)束,耗時(shí):" + (System.currentTimeMillis() - beginTime) + "毫秒"); //第二種用法- 2
總結(jié)
以上是生活随笔為你收集整理的slf4j+log4j2的整合配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SLF4J和log4j的整合使用
- 下一篇: Scrapy入门(一)安装Scrapy环