Log4j

Log4j用于日志記錄禽翼,有兩個版本捍壤,一個是老版本Log4j 1.x续誉,這里寫的是新版本Apache Log4j 2的使用

使用

  • Gradle 內(nèi)添加依賴
dependencies {
  compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.0'
  compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.0'
}
  • 編寫配置文件

  • 應(yīng)用程序中使用

static Logger log =LogManager.getLogger();//默認(rèn)以所在類名稱作為logger名稱哲银,可以在配置文件中指定特定名稱的日志屬性
log.debug(Object);

org.apache.logging.log4j.Level用來表明消息的優(yōu)先級扛吞,ALL輸出全部log,OFF不輸出

ALL < Trace < Debug < Info < Warn < Error < Fatal < OFF

框架中有兩種類型的對象:
Core Objects
Logger:捕獲日志信息
Layout:設(shè)定格式
Appender:指定日志信息的輸出位置(console,files,sockets等)
Support Objects
Level:設(shè)定等級OFF, FATAL, ERROR, WARN,INFO,DEBUG, ALL
Filter:分析過濾日志
ObjectRenderer:把對象作為日志時荆责,輸出字符串的方式
LogManger:管理日志框架滥比,讀取初始化配置信息

log4j框架

配置

可以通過文件配置,也可以通過程序配置做院,通常使用配置文件

如果沒有配置盲泛,會使用默認(rèn)配置,由DefaultConfiguration類提供键耕,等價于下下配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

使用配置文件時寺滚,Log4j的ConfigurationFactory支持property,JSON屈雄,YAML和XML文件配置村视,它會在classpath下查找文件對應(yīng)的文件名稱,例如log4j2.properties酒奶,log4j2.xml蚁孔,通常將配置文件放在scr/resouces目錄下


Log4j property文件配置

log4j.rootLogger=info, stdout

### stdout appender 設(shè)定 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n

### 設(shè)置特定package的日志輸出級別和appender###
log4j.logger.org.springframework=info
log4j.logger.org.apache.catalina=info
log4j.logger.org.apache.commons.digester.Digester=info
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug

配置根Logger

定義log4j支持的日志級別及輸出目的地
log4j.rootLogger = [ level ] , appenderName, appenderName, …
level 是日志記錄的優(yōu)先級
appenderName指定日志信息輸出的目的地,可以定義多個

配置輸出目的地 Appender

輸出到文件

# 定義文件路徑
log = /usr/home/log4j
log4j.rootLogger = DEBUG, FILE
#定義appender
log4j.appender.FILE=org.apache.log4j.FileAppender
#設(shè)定文件名稱
log4j.appender.FILE.File=${log}/log.out
#設(shè)定布局
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false

輸出到控制臺

...appender名稱為stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out //或者System.err
log4j.appender.stdout.Threshold=WARN //日志消息的輸出門限惋嚎,低于則不輸出
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout //設(shè)定格式
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss.SSS} %-5p %c{1}:%L - %m%n

布局 Layout

指定輸出格式杠氢,例如PatternLayoutXmlLayout另伍,JsonLayout

PatternLayout 格式

轉(zhuǎn)換字符 含義
%c 輸出日志事件所在的目錄(類名)鼻百,全名為"a.b.c" %c{2}輸出類名 "b.c"
%d 用于輸出時間 %d{HH:mm:ss,SSS} 或者 %d{dd MMM yyyy HH:mm:ss,SSS}
%L 請求輸出日志的代碼行號
%m 輸出代碼中指定的消息
%n 輸出一個平臺相關(guān)的換行符
%p 輸出日志信息優(yōu)先級
%t 線程名
%-5p 左對齊,最小寬度為5摆尝,輸出日志等級

Log4j2 property配置文件

根據(jù)屬性層級温艇,逐級配置即可,具體屬性Configuration說明

最外層的可以是status结榄,name,appender中贝,filterloger等臼朗,示例如下:

status = error
dest = err
name = PropertiesConfig
 
property.filename = target/rolling/rollingtest.log
 
filter.threshold.type = ThresholdFilter
filter.threshold.level = debug
 
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = error
 
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = target/rolling2/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
 
logger.rolling.name = com.example.my.app
logger.rolling.level = debug
logger.rolling.additivity = false
logger.rolling.appenderRef.rolling.ref = RollingFile
 
rootLogger.level = info
# 對應(yīng)appender.console
rootLogger.appenderRef.stdout.ref = STDOUT 

SLF4j

SLF4J(Simple logging Facade for Java)是各種日志框架(例如java.util.logging邻寿,logback蝎土,log4j)的簡單抽象,最終在部署時插入所需的日志框架

簡單使用:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    String name = "abc"
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World, {}", name);
  }
}

使用{}作為占位符绣否,左右花括號之間沒有其他字符

  • 避免不輸出時誊涯,構(gòu)造參數(shù)引發(fā)計算,例如logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
  • 本質(zhì)上是使用兩次判斷l(xiāng)ogger是否開啟
if(logger.isDebugEnabled()) {
  logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
SLF4j和不同日志框架結(jié)合使用

如果使用SLF4J綁定log4j蒜撮,使用三個庫暴构,slf4j本身,slf4j到log4j的適配器段磨,log4j本身

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.16</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.16</version>
</dependency>
<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>

如果綁定到log4j2取逾,log4j-slf4j-impl內(nèi)部包含所有需要的依賴

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.11.0</version>
</dependency>


Reference:

log4j Tutorial
API

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市苹支,隨后出現(xiàn)的幾起案子砾隅,更是在濱河造成了極大的恐慌,老刑警劉巖债蜜,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晴埂,死亡現(xiàn)場離奇詭異,居然都是意外死亡寻定,警方通過查閱死者的電腦和手機儒洛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狼速,“玉大人琅锻,你說我怎么就攤上這事√坪” “怎么了浅浮?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵沫浆,是天一觀的道長捷枯。 經(jīng)常有香客問我,道長专执,這世上最難降的妖魔是什么淮捆? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮本股,結(jié)果婚禮上攀痊,老公的妹妹穿的比我還像新娘。我一直安慰自己拄显,他們只是感情好苟径,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躬审,像睡著了一般棘街。 火紅的嫁衣襯著肌膚如雪蟆盐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天遭殉,我揣著相機與錄音石挂,去河邊找鬼。 笑死险污,一個胖子當(dāng)著我的面吹牛痹愚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛔糯,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼拯腮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚁飒?” 一聲冷哼從身側(cè)響起疾瓮,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎飒箭,沒想到半個月后狼电,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡弦蹂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年肩碟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凸椿。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡削祈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脑漫,到底是詐尸還是另有隱情髓抑,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布优幸,位于F島的核電站吨拍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏网杆。R本人自食惡果不足惜羹饰,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碳却。 院中可真熱鬧队秩,春花似錦、人聲如沸昼浦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽关噪。三九已至鸟蟹,卻和暖如春物舒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背戏锹。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工冠胯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锦针。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓荠察,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奈搜。 傳聞我的和親對象是個殘疾皇子悉盆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進行統(tǒng)計分析...
    時待吾閱讀 4,991評論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況馋吗,周期性的記錄到文件中供其他應(yīng)用進行統(tǒng)計分析...
    時待吾閱讀 4,975評論 0 6
  • 一焕盟、Log4j簡介 Log4j有三個主要的組件:Loggers(記錄器),Appenders (輸出源)和Layo...
    默默守護閱讀 1,901評論 2 8
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一宏粤、L...
    enshunyan閱讀 3,282評論 0 0
  • Log4J的配置文件(Configuration File)就是用來設(shè)置記錄器的級別脚翘、存放器和布局的,它可接key...
    Alex_1799閱讀 45,166評論 0 11