日志工具-Log4j

Log4j

概述

Log4j 是一個使用 Java 語言編寫的,可靠、快速、靈活的日志框架(API)垢袱,使用 Apache Software License 授權。
它被移植到 C港柜、C++请契、C#、Perl夏醉、Python爽锥、Ruby 和 Eiffel 語言中。Log4j 是高度可配置的畔柔,在運行期使用外部的配置文件對其進行配置氯夷。它按照優(yōu)先級別記錄日志,并可將日志信息定向輸出到各種介質靶擦,比如數(shù)據(jù)庫腮考、文件雇毫、控制臺、Unix Syslog等踩蔚。

Log4j的歷史

始于 1996 年棚放,作為記錄E.U. SEMPER (Secure Electronic Marketplace for Europe)項目跟蹤信息的 API。
經(jīng)過大量的完善和蛻變寂纪,最初的 API 終于演進為 Log4j席吴,一個在 Java 社區(qū)流行的日志類庫赌结。該類庫使用 Apache Software License 授權捞蛋,該授權是經(jīng)開源促進協(xié)會認證的、完整的開源協(xié)議柬姚。
最新版本的 Log4j拟杉,連同其代碼、類文件和文檔可通過 http://logging.apache.org/log4j/ 獲取量承。

Log4j的功能

  • 線程安全搬设。
  • 速度優(yōu)化。
  • 基于命名的 logger 層次撕捍。
  • 每個 logger 支持多種輸出 appender拿穴。
  • 支持國際化。不受限于預定義好的設施忧风。
  • 日志記錄行為可在運行期通過配置文件設置默色。
  • 設計之初就考慮了處理 Java 異常。
  • 使用多個日志級別:ALL狮腿、TRACE腿宰、DEBUG、INFO缘厢、WARN吃度、ERROR、FATAL贴硫。
  • 通過擴展 Layout 類可輕松改變輸出日志的格式椿每。
  • 輸出日志的目的和策略可通過實現(xiàn) Appender 接口改變。
  • 失敗即停止英遭。雖然 Log4j 努力做到最好拖刃,但不保證每一條日志都能發(fā)送到指定目的地。

架構

Log4j API 采用分層架構贪绘,每一層有不同的對象兑牡,完成不同的任務。這種分層架構讓設計變得靈活税灌,且易于日后擴展均函。

Log4j 里分兩種類型的對象

  • 核心對象:這是框架必需的對象亿虽,使用框架時必需用到它們。
  • 支持對象:這是框架的可選對象苞也,它們支持核心對象做一些額外的洛勉,但并不重要的任務。

核心對象

核心對象包括以下三種類型:

Logger對象

Logger對象位于最上一層如迟,該對象負責獲取日志信息收毫,并存儲于一個分層的命名空間之中。

Appender對象

該對象位于分層架構中的較低一層殷勘,Appender 對象負責將日志信息發(fā)布到不同目的地此再,比如數(shù)據(jù)庫、文件玲销、控制臺输拇、Unix Syslog 等

Layout對象

Layout層提供了用于格式化日志信息的對象,在發(fā)布日志信息之前贤斜,它為 appender 對象提供支持策吠。

支持對象

  • Level 對象:定義了日志信息的粒度和優(yōu)先級。API 定義了七種級別:OFF瘩绒、DEBUG猴抹、INFO、ERROR锁荔、WARN蟀给、FATAL、ALL堕战。
  • Filter對象:用于分析日志信息坤溃,進而決定該條日志是否被記錄。一個 Appender 對象可對應多個 Filter 對象嘱丢,當日志信息傳給 Appender 對象時薪介,與其關聯(lián)的所有 Filter 對象需要判斷是否將日志信息發(fā)布到目的地。
  • ObjectRenderer對象:負責為傳入日志框架的不同對象提供字符串形式的表示越驻,Layout 對象使用該對象來準備最終的日志信息汁政。
  • LogManager對象:管理日志框架,它負責從系統(tǒng)級的配置文件或類中讀取初始配置參數(shù)缀旁。

Appender是Log4j里面最核心最重要的類记劈,Apache Log4j 提供的 Appender 對象主要負責將日志信息打印至不同目的地,比如控制臺并巍、文件目木、網(wǎng)絡套接字、NT 事件日志等懊渡。每個Appender對象都有不同的屬性刽射,這些屬性決定了該對象的行為军拟。

屬性 描述
layout Appender 使用 Layout 對象和與之關聯(lián)的模式來格式化日志信息
target 目的地可以是控制臺、文件誓禁,或依賴于 appender 的對象懈息。
level 級別用來控制過濾日志信息。
threshold Appender 可脫離于日志級別定義一個閥值級別摹恰,Appender 對象會忽略所有級別低于閥值級別的日志辫继。
filter 對象可在級別基礎之上分析日志信息,來決定 Appender 對象是否處理或忽略一條日志記錄俗慈。通過在配置文件中使用如下方法姑宽,將 Appender 對象添加至 Logger 對

實例

配置需求

  • 定義根日志級別為 DEBUG,并將名為 FILE 的 appender 添加其上姜盈。
  • appender FILE 定義為 org.apache.Log4j.FileAppender低千,它將日志寫入 log 目錄下一個名為 log.out 的文件中配阵。
  • layout 被定義為 %m%n馏颂,即打印出來的日志信息末尾加入換行。

Log4j 支持 Unix 風格的變量替換棋傍,比如 ${variableName}

配置文件

Log4j.propertis文件內(nèi)容

# Define the root logger with appender file 
log=/user/document/log
Log4j.rootLogger = DEBUG, FILE
Log4j.appender.FILE=org.apache.Log4j.FileAppender
Log4j.appener.FILE.File= ${log}/log.out

Log4j.appender.FILE.layout=org.apache.Log4j.PatternLayout
Log4j.appender.FILE.layout.conversionPattern=%m%n

通過XML配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Log4j:configuration SYSTEM "Log4j.dtd">
<Log4j:configuration>
 <appender name="FILE" class="org.apache.Log4j.FileAppender">
<param name="file" value="${log}/log.out"/>
<layout class="org.apache.Log4j.PatternLayout">
 <param name="conversionPattern" value="%m%n"/>
</layout>
</appender>
<logger name="Log4j.rootLogger" additivity="false">
 <level value="DEBUG"/>
 <paaender-ref ref="FILE"/>
</logger>
</log4j:configuration>

Loging方法

Logger 類提供了很多方法用來處理日志救拉,Logger 類不允許初始化一個新的實例,但提供了兩個靜態(tài)方法用來獲取 Logger 對象:

  • public static Logger getRootLogger();
  • public static Logger getLogger(String name);

第一個方法返回應用實例沒有名字的根日志瘫拣。
其他有名字的 Logger 對象通過傳入日志的名字亿絮,調用第二個方法獲得。日志的名字是傳入的任何字符串麸拄,通常為類名或包名派昧。

附錄

以上為筆記主要記錄點,很多東西沒有提及拢切,詳細文檔信息等進入Log4j官網(wǎng)獲取.

PatternLayout

  • 模式轉換字符
  • 格式修飾符

參考極客學院有關Log4j資料整理所得蒂萎。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淮椰,隨后出現(xiàn)的幾起案子五慈,更是在濱河造成了極大的恐慌,老刑警劉巖主穗,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泻拦,死亡現(xiàn)場離奇詭異,居然都是意外死亡忽媒,警方通過查閱死者的電腦和手機争拐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晦雨,“玉大人架曹,你說我怎么就攤上這事灯抛。” “怎么了音瓷?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵对嚼,是天一觀的道長。 經(jīng)常有香客問我绳慎,道長纵竖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任杏愤,我火速辦了婚禮靡砌,結果婚禮上,老公的妹妹穿的比我還像新娘珊楼。我一直安慰自己通殃,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布厕宗。 她就那樣靜靜地躺著画舌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪已慢。 梳的紋絲不亂的頭發(fā)上曲聂,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音佑惠,去河邊找鬼朋腋。 笑死,一個胖子當著我的面吹牛膜楷,可吹牛的內(nèi)容都是我干的旭咽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼赌厅,長吁一口氣:“原來是場噩夢啊……” “哼穷绵!你這毒婦竟也來了?” 一聲冷哼從身側響起察蹲,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤请垛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洽议,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宗收,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年亚兄,在試婚紗的時候發(fā)現(xiàn)自己被綠了混稽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖匈勋,靈堂內(nèi)的尸體忽然破棺而出礼旅,到底是詐尸還是另有隱情,我是刑警寧澤洽洁,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布痘系,位于F島的核電站,受9級特大地震影響饿自,放射性物質發(fā)生泄漏汰翠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一昭雌、第九天 我趴在偏房一處隱蔽的房頂上張望复唤。 院中可真熱鬧,春花似錦烛卧、人聲如沸佛纫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呈宇。三九已至,卻和暖如春间聊,著一層夾襖步出監(jiān)牢的瞬間攒盈,已是汗流浹背抵拘。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工哎榴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人僵蛛。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓尚蝌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親充尉。 傳聞我的和親對象是個殘疾皇子飘言,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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

  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 5,055評論 1 13
  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況驼侠,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 4,991評論 0 6
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一姿鸿、L...
    enshunyan閱讀 3,294評論 0 0
  • 一、Log4j簡介 Log4j有三個主要的組件:Loggers(記錄器)倒源,Appenders (輸出源)和Layo...
    默默守護閱讀 1,913評論 2 8
  • log4j 1.1 簡介 Log4j是一個由Java編寫可靠苛预、靈活的日志框架,是Apache旗下的一個開源項目笋熬;現(xiàn)...
    賈博巖閱讀 7,907評論 1 32