1. 程式人生 > >log4j的介紹及使用

log4j的介紹及使用

一、Log4j簡介

Log4j有三個主要的元件:Loggers(記錄器),Appenders (輸出源)和Layouts(佈局)。這裡可簡單理解為日誌類別,日誌要輸出的地方和日誌以何種形式輸出。綜合使用這三個元件可以輕鬆地記錄資訊的型別和級別,並可以在執行時控制日誌輸出的樣式和位置。

1、Loggers

Loggers元件在此係統中被分為五個級別:DEBUG、INFO、WARN、ERROR和FATAL。這五個級別是有順序的,DEBUG < INFO < WARN < ERROR < FATAL,分別用來指定這條日誌資訊的重要程度,明白這一點很重要,Log4j有一個規則:只輸出級別不低於設定級別的日誌資訊,假設Loggers級別設定為INFO,則INFO、WARN、ERROR和FATAL級別的日誌資訊都會輸出,而級別比INFO低的DEBUG則不會輸出。

2、Appenders

禁用和使用日誌請求只是Log4j的基本功能,Log4j日誌系統還提供許多強大的功能,比如允許把日誌輸出到不同的地方,如控制檯(Console)、檔案(Files)等,可以根據天數或者檔案大小產生新的檔案,可以以流的形式傳送到其它地方等等。

常使用的類如下:

org.apache.log4j.ConsoleAppender(控制檯)
org.apache.log4j.FileAppender(檔案)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案)
org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)

配置模式:
log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1

log4j.appender.appenderName.OptionN = valueN

3、Layouts

有時使用者希望根據自己的喜好格式化自己的日誌輸出,Log4j可以在Appenders的後面附加Layouts來完成這個功能。Layouts提供四種日誌輸出樣式,如根據HTML樣式、自由指定樣式、包含日誌級別與資訊的樣式和包含日誌時間、執行緒、類別等資訊的樣式。

常使用的類如下:

org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等資訊)

配置模式:

log4j.appender.appenderName.layout =className
log4j.appender.appenderName.layout.Option1 = value1

log4j.appender.appenderName.layout.OptionN = valueN

二、配置詳解

在實際應用中,要使Log4j在系統中執行須事先設定配置檔案。配置檔案事實上也就是對Logger、Appender及Layout進行相應設定。Log4j支援兩種配置檔案格式,一種是XML格式的檔案,一種是properties屬性檔案。下面以properties屬性檔案為例介紹log4j.properties的配置。

1、配置根Logger:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
log4j.additivity.org.apache=false:表示Logger不會在父Logger的appender裡輸出,預設為true。
level :設定日誌記錄的最低級別,可設的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別,Log4j建議只使用中間四個級別。通過在這裡設定級別,您可以控制應用程式中相應級別的日誌資訊的開關,比如在這裡設定了INFO級別,則應用程式中所有DEBUG級別的日誌資訊將不會被打印出來。
appenderName:就是指定日誌資訊要輸出到哪裡。可以同時指定多個輸出目的地,用逗號隔開。
例如:log4j.rootLogger=INFO,A1,B2,C3

2、配置日誌資訊輸出目的地(appender):
log4j.appender.appenderName = className
appenderName:自定義appderName,在log4j.rootLogger設定中使用;
className:可設值如下:
(1)org.apache.log4j.ConsoleAppender(控制檯)
(2)org.apache.log4j.FileAppender(檔案)
(3)org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
(4)org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案)
(5)org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)
(1)ConsoleAppender選項:
Threshold=WARN:指定日誌資訊的最低輸出級別,預設為DEBUG。
ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。
Target=System.err:預設值是System.out。
(2)FileAppender選項:
Threshold=WARN:指定日誌資訊的最低輸出級別,預設為DEBUG。
ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。
Append=false:true表示訊息增加到指定檔案中,false則將訊息覆蓋指定的檔案內容,預設值是true。
File=D:/logs/logging.log4j:指定訊息輸出到logging.log4j檔案中。
(3)DailyRollingFileAppender選項:
Threshold=WARN:指定日誌資訊的最低輸出級別,預設為DEBUG。
ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。
Append=false:true表示訊息增加到指定檔案中,false則將訊息覆蓋指定的檔案內容,預設值是true。
File=D:/logs/logging.log4j:指定當前訊息輸出到logging.log4j檔案中。
DatePattern=’.’yyyy-MM:每月滾動一次日誌檔案,即每月產生一個新的日誌檔案。當前月的日誌檔名為logging.log4j,前一個月的日誌檔名為logging.log4j.yyyy-MM。
另外,也可以指定按周、天、時、分等來滾動日誌檔案,對應的格式如下:
1)’.’yyyy-MM:每月
2)’.’yyyy-ww:每週
3)’.’yyyy-MM-dd:每天
4)’.’yyyy-MM-dd-a:每天兩次
5)’.’yyyy-MM-dd-HH:每小時
6)’.’yyyy-MM-dd-HH-mm:每分鐘
(4)RollingFileAppender選項:
Threshold=WARN:指定日誌資訊的最低輸出級別,預設為DEBUG。
ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。
Append=false:true表示訊息增加到指定檔案中,false則將訊息覆蓋指定的檔案內容,預設值是true。
File=D:/logs/logging.log4j:指定訊息輸出到logging.log4j檔案中。
MaxFileSize=100KB:字尾可以是KB, MB 或者GB。在日誌檔案到達該大小時,將會自動滾動,即將原來的內容移到logging.log4j.1檔案中。
MaxBackupIndex=2:指定可以產生的滾動檔案的最大數,例如,設為2則可以產生logging.log4j.1,logging.log4j.2兩個滾動檔案和一個logging.log4j檔案。

3、配置日誌資訊的輸出格式(Layout):
log4j.appender.appenderName.layout=className
className:可設值如下:
(1)org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
(2)org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
(3)org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串)
(4)org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)
(1)HTMLLayout選項:
LocationInfo=true:輸出java檔名稱和行號,預設值是false。
Title=My Logging: 預設值是Log4J Log Messages。
(2)PatternLayout選項:
ConversionPattern=%m%n:設定以怎樣的格式顯示訊息。

格式化符號說明:

%p:輸出日誌資訊的優先順序,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:輸出自應用程式啟動到輸出該log資訊耗費的毫秒數。
%t:輸出產生該日誌事件的執行緒名。
%l:輸出日誌事件的發生位置,相當於%c.%M(%F:%L)的組合,包括類全名、方法、檔名以及在程式碼中的行數。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:輸出日誌資訊所屬的類目,通常就是所在類的全名。
%M:輸出產生日誌資訊的方法名。
%F:輸出日誌訊息產生時所在的檔名稱。
%L::輸出程式碼中的行號。
%m::輸出程式碼中指定的具體日誌資訊。
%n:輸出一個回車換行符,Windows平臺為”\r\n”,Unix平臺為”\n”。
%x:輸出和當前執行緒相關聯的NDC(巢狀診斷環境),尤其用到像java servlets這樣的多客戶多執行緒的應用中。
%%:輸出一個”%”字元。
另外,還可以在%與格式字元之間加上修飾符來控制其最小長度、最大長度、和文字的對齊方式。如:
1)%20c:指定輸出category的名稱,最小的長度是20,如果category的名稱長度小於20的話,預設的情況下右對齊。
2)%-20c:”-“號表示左對齊。
3)%.30c:指定輸出category的名稱,最大的長度是30,如果category的名稱長度大於30的話,就會將左邊多出的字元截掉,但小於30的話也不會補空格。

附:Log4j比較全面的配置

Log4j配置檔案實現了輸出到控制檯、檔案、回滾檔案、傳送日誌郵件、輸出到資料庫日誌表、自定義標籤等全套功能。
log4j.rootLogger=DEBUG,console,dailyFile,im
log4j.additivity.org.apache=true
# 控制檯(console)
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n

# 日誌檔案(logFile)
log4j.appender.logFile=org.apache.log4j.FileAppender
log4j.appender.logFile.Threshold=DEBUG
log4j.appender.logFile.ImmediateFlush=true
log4j.appender.logFile.Append=true
log4j.appender.logFile.File=D:/logs/log.log4j
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n
# 回滾檔案(rollingFile)
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.Threshold=DEBUG
log4j.appender.rollingFile.ImmediateFlush=true
log4j.appender.rollingFile.Append=true
log4j.appender.rollingFile.File=D:/logs/log.log4j
log4j.appender.rollingFile.MaxFileSize=200KB
log4j.appender.rollingFile.MaxBackupIndex=50
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n
# 定期回滾日誌檔案(dailyFile)
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.Threshold=DEBUG
log4j.appender.dailyFile.ImmediateFlush=true
log4j.appender.dailyFile.Append=true
log4j.appender.dailyFile.File=D:/logs/log.log4j
log4j.appender.dailyFile.DatePattern=’.’yyyy-MM-dd
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n
# 應用於socket
log4j.appender.socket=org.apache.log4j.RollingFileAppender
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.Port=5001
log4j.appender.socket.LocationInfo=true
# Set up for Log Factor 5
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 傳送日誌到指定郵件
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=FATAL
log4j.appender.mail.BufferSize=10
log4j.appender.mail.From =
[email protected]

log4j.appender.mail.SMTPHost=mail.com
log4j.appender.mail.Subject=Log4J Message
log4j.appender.mail.To= [email protected]
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n
# 應用於資料庫
log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=
log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES(‘=[%-5p] %d(%r) –> [%t] %l: %m %x %n’)
log4j.appender.database.layout=org.apache.log4j.PatternLayout
log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n

# 自定義Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient =
[email protected]

log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n

相關推薦

Log4j2-Log4j 2介紹使用

Log4j 2 官網 Log4j 2簡介 架構 日誌級別 Filter Appender 將日誌請求列印到多個目標 Layout 自定義輸出格式 轉到Log4j 2 API 控制檯Appender的簡單配置 檔案Appender的簡單配置 SocketAppender Asy

log4j介紹使用

一、Log4j簡介 Log4j有三個主要的元件:Loggers(記錄器),Appenders (輸出源)和Layouts(佈局)。這裡可簡單理解為日誌類別,日誌要輸出的地方和日誌以何種形式輸出。綜合使用這三個元件可以輕鬆地記錄資訊的型別和級別,並可以在執行時控制日誌輸出的樣式和位置。 1、Loggers Lo

JavaWeb網上圖書商城完整項目--day03-1.圖書模塊功能介紹相關類創建

class default package ren 書籍 logs main java getc 1 前兩天我們學習了user用戶模塊和圖書的分類模塊,接下來我們學習圖書模塊 圖書模塊的功能主要是下面的功能: 2 接下來我們創建對應的包 我們來看看對應的數據庫表t_bo

C#數據緩存介紹Caching通用幫助類整理

能夠 eric article for generic arr stat ati cti C#緩存主要是為了提高數據的讀取速度。由於server和應用client之間存在著流量的瓶頸,所以讀取大容量數據時,使用緩存來直接為client服務,能夠降低client與serv

ssh介紹scp,sftp應用

network 服務器 數據安全 linux 數據包 一、ssh介紹 SSH是 secure Shell Protocol的簡寫,由IETF網絡工作小組(Network Working Group)制定;在進行數據傳輸之前 ,SSH先對聯機數據包通過加密技術進行加密處理,加密後再進行數據

自動化運維之saltstack(二)states介紹使用

配置文件 如何 states master 根目錄 一、什麽是Salt States?Salt States是Salt模塊的擴展,主系統使用的狀態系統叫SLS系統,SLS代表Saltstack State,Salt是一些狀態文件,其中包含有關如何配置Salt子節點的信息,這些狀態被存放在一

mongoDB簡單介紹安裝

疑問 每次 data- .org 存儲 cmd 針對 安裝包 目錄 近期一段時間對mongoDB進行了簡單的學習,從它是什麽?幹什麽?怎麽用?優缺點?這一系列的疑問到如今可以簡單運用。我想須要對其進行簡單的總結和概述。那麽這一篇就從最基礎的開始,對其

展示C代碼覆蓋率的gcovr工具簡單介紹相關命令使用演示樣例

文件夾 mes repo 例如 oid else if dir total down (本人正在參加2015博客之星評選,誠邀你來投票,謝謝:username=zhouzxi">http://vote.blog.csdn.net/blogstar2015

架構師之路--搜索業務和技術介紹容錯機制

朋友 單節點 adb 一致性 公司 一個 memcache 消息通知 包括  今天和搜索部門一起做了一下MQ的遷移,順便交流一下業務和技術。發現現在90後小夥都挺不錯。我是指能力和探究心。我家男孩,不招女婿。   在前面的文章中也提到,我們有媒資庫(樂視視頻音頻本身內容)

UltraEdit正則表達式介紹實例

官網 文檔 ltr 能夠 本科 min 組合 表達 使用方法 前幾天,有個將Excel中的數據導入到數據庫中的需求。原本想到用程序讀取Excel中的數據並存儲到數據庫中,但經一哥們的提醒,說用 EditPlus或UltraEdit這種工具直接將數據拼湊成SQL插

Opencv介紹opencv3.0在 vs2010上的配置

opencv介紹、opencv3.0在 vs2010上如何的配置 OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、R

C#操作Word Aspose.Words組件介紹使用—基本介紹與DOM概述

控制 包含 枚舉類 讀取 標記 服務器端 方法 python level 1.基本介紹 Aspose.Words是一個商業.NET類庫,可以使得應用程序處理大量的文件任務。Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP

Golang學習-第一篇 Golang的簡單介紹Windows環境下安裝、部署

需要 簡單 電腦 pan 生成文件 多核 -- pear () 序言 這是本人博客園第一篇文章,寫的不到位之處,希望各位看客們諒解。 本人一直從事.NET的開發工作,最近在學習Golang,所以想著之前學習的過程中都沒怎麽好好的將學習過程記錄下來。深感惋惜! 現在將Gola

樸素貝葉斯分類算法介紹python代碼實現案例

urn bus 人的 元素 1.2 -s index 代碼 步驟 樸素貝葉斯分類算法 1、樸素貝葉斯分類算法原理 1.1、概述 貝葉斯分類算法是一大類分類算法的總稱 貝葉斯分類算法以樣本可能屬於某類的概率來作為分類依據 樸素貝葉斯分類算法是貝葉斯分類算法中最簡單的一種 註:

RabbitMQ介紹安裝部署

lan 行數 安裝部署 原理圖 tro 快的 它的 主題 通配符 本節內容: RabbitMQ介紹 RabbitMQ運行原理 RabbitMQ重要術語 三種ExchangeType RabbitMQ集群種類 集群基本概念 鏡像模式部署集群 一、RabbitMQ介紹

Storm介紹安裝部署

節點和 yam 實時計算系統 如果 int 端口 bili usr then 本節內容: Apache Storm是什麽 Apache Storm核心概念 Storm原理架構 Storm集群安裝部署 啟動storm ui、Nimbus和Supervisor 一、Ap

Python零基礎學習系列之二--Python介紹環境搭建

url 軟件包 三方庫 簡單的 lin 文件的 span 高級程序設計 擴展 1-1、Python簡介:  Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年

Charles界面介紹使用方法

ade 當前 lin rewrite ip地址 鼠標滑過 列表 exp 自動 本隨筆主要內容: 一、Charles界面介紹 二、Charles使用 1.會話(Repeat、Focus、Compare、黑白名單等) 2.模擬請求做mock,使用斷點、Map或Rewrite

JSR-303 Bean Validation 介紹 Spring MVC 服務端驗證最佳實踐

unit clas pre 服務 技術 artifact object out otn 任何時候,當要處理一個應用程序的業務邏輯,數據校驗是你必須要考慮和面對的事情。 應用程序必須通過某種手段來確保輸入參數在上下文來說是正確的。 分層的應用在很多時候,

【能力提升】SQL Server常見問題介紹高速解決建議

轉移 連接數 運行時 方案 備份 登錄 rac 攻擊 cnblogs 前言   本文旨在幫助SQL Server數據庫的使用人員了解常見的問題。及高速解決這些問題。這些問題是數據庫的常規管理問題,對於非常多對數據庫沒有深入了解的朋友提供一個大概的常見問題框架。