Log4j使用總結

一、介紹
Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務 器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。
Log4j由三個重要的組件構成:日志信息的優先級,日志信息的輸出目的地,日志信息的輸出格式。日志信息的優先級從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日志信息的重要程度;日志信息的輸出目的地指定了日志將打印到控制臺還是文件中;而輸出格式則控制了日志信息的顯示內容。

二、配置文件
其實您也可以完全不使用配置文件,而是在代碼中配置Log4j環境。但是,使用配置文件將使您的應用程序更加靈活。
Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是properties格式的文件。下面我們介紹使用properties格式做為配置文件的方法:
示例:
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

1. 配置根Logger,其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關。比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來。
appenderName就是指定日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。

2. 配置日志信息輸出目的地Appender,其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制臺),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
(1).ConsoleAppender選項
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
Target=System.err:默認情況下是:System.out,指定輸出控制臺
(2).FileAppender 選項
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
(3).DailyRollingFileAppender 選項
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
DatePattern=’.'yyyy-ww:每周滾動一次文件,即每周產生一個新的文件。當然也可以指定按月、周、天、時和分。即對應的格式如下:
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:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以產生的滾動文件的最大數。

3. 配置日志信息的布局,其語法為:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)

4、輸出格式設置
在配置文件中可以通過log4j.appender.A1.layout.ConversionPattern設置日志輸出格式。
參數:
%p: 輸出日志信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c: 輸出日志信息所屬的類目,通常就是所在類的全名
%t: 輸出產生該日志事件的線程名
%l: 輸出日志事件的發生位置,相當于%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%%: 輸出一個”%”字符
%F: 輸出日志消息產生時所在的文件名稱
%L: 輸出代碼中的行號
%m: 輸出代碼中指定的消息,產生的日志具體信息
%n: 輸出一個回車換行符,Windows平臺為”\r\n”,Unix平臺為”\n”輸出日志信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,”-”號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。
4)%20.30c:如果category的名稱小于20就補空格,并且右對齊,如果其名稱長于30字符,就從左邊交遠銷出的字符截掉。

三、在程序中的使用
在程序中使用Log4j之前,首先要將commons-logging.jar和logging-log4j-1.2.9.jar導入到classpath中,并將log4j.properties放于src根目錄中。接下來就可以使用了。

1.得到記錄器
使用Log4j,第一步就是獲取日志記錄器,這個記錄器將負責控制日志信息。其語法為:
public static Logger getLogger( String name),
通過指定的名字獲得記錄器,如果必要的話,則為這個名字創建一個新的記錄器。Name一般取本類的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;
注:推薦使用commons-logging結合log4j進行日志記錄
private static Log logger = LogFactory.getLog(Yourclass.class);


2.插入記錄信息(格式化日志信息)
當上兩個必要步驟執行完畢,您就可以輕松地使用不同優先級別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;

四、Log4j比較全面的配置
LOG4J的配置之簡單使它遍及于越來越多的應用中了:Log4J配置文件實現了輸出到控制臺、文件、回滾文件、發送日志郵件、輸出到數據庫日志表、自定義標簽等全套功能。擇其一二使用就夠用了。
Java代碼收藏代碼
  1. log4j.rootLogger=DEBUG,CONSOLE,A1,im
  2. log4j.addivity.org.apache=true
  3. #應用于控制臺
  4. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
  5. log4j.appender.Threshold=DEBUG
  6. log4j.appender.CONSOLE.Target=System.out
  7. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
  8. log4j.appender.CONSOLE.layout.ConversionPattern=[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n
  9. #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]n%c[CATEGORY]%n%m[MESSAGE]%n%n
  10. #應用于文件
  11. log4j.appender.FILE=org.apache.log4j.FileAppender
  12. log4j.appender.FILE.File=file.log
  13. log4j.appender.FILE.Append=false
  14. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
  15. log4j.appender.FILE.layout.ConversionPattern=[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n
  16. #UsethislayoutforLogFactor5analysis
  17. #應用于文件回滾
  18. log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
  19. log4j.appender.ROLLING_FILE.Threshold=ERROR
  20. log4j.appender.ROLLING_FILE.File=rolling.log//文件位置,也可以用變量${java.home}、rolling.log
  21. log4j.appender.ROLLING_FILE.Append=true//true:添加false:覆蓋
  22. log4j.appender.ROLLING_FILE.MaxFileSize=10KB//文件最大尺寸
  23. log4j.appender.ROLLING_FILE.MaxBackupIndex=1//備份數
  24. log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
  25. log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n
  26. #應用于socket
  27. log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
  28. log4j.appender.SOCKET.RemoteHost=localhost
  29. log4j.appender.SOCKET.Port=5001
  30. log4j.appender.SOCKET.LocationInfo=true
  31. #SetupforLogFacter5
  32. log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
  33. log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
  34. #LogFactor5Appender
  35. log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
  36. log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
  37. #發送日志給郵件
  38. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
  39. log4j.appender.MAIL.Threshold=FATAL
  40. log4j.appender.MAIL.BufferSize=10
  41. log4j.appender.MAIL.From=web@www.wuset.com
  42. log4j.appender.MAIL.SMTPHost=www.wusetu.com
  43. log4j.appender.MAIL.Subject=Log4JMessage
  44. log4j.appender.MAIL.To=web@www.wusetu.com
  45. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
  46. log4j.appender.MAIL.layout.ConversionPattern=[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n
  47. #用于數據庫
  48. log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
  49. log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
  50. log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
  51. log4j.appender.DATABASE.user=root
  52. log4j.appender.DATABASE.password=
  53. log4j.appender.DATABASE.sql=INSERTINTOLOG4J(Message)VALUES(’[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n’)
  54. log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
  55. log4j.appender.DATABASE.layout.ConversionPattern=[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n
  56. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
  57. log4j.appender.A1.File=SampleMessages.log4j
  58. log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’
  59. log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
  60. #自定義Appender
  61. log4j.appender.im=net.cybercorlin.util.logger.appender.IMAppender
  62. log4j.appender.im.host=mail.cybercorlin.net
  63. log4j.appender.im.username=username
  64. log4j.appender.im.password=password
  65. log4j.appender.im.recipient=corlin@cybercorlin.net
  66. log4j.appender.im.layout=org.apache.log4j.PatternLayout
  67. log4j.appender.im.layout.ConversionPattern=[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444426.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444426.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444426.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言: GDB調試技術(一)

啟動GDB的方法有以下幾種: 1、gdb <program> program也就是你的執行文件,一般在當然目錄下。’ 例如我寫了一個簡單的helloword程序 #include <stdio.h> int main(){int a = 1;char* ch = "hello world";printf("%s\n",ch);return 0; }那么我…

C語言: ---windows下VS Debug調試

首先我先列出來常用的一些命令或者鍵盤控制: F5 開始調試,執行到斷點 Shift + F5 停止調試 F9 在光標所在行添加斷點 Shift + F9 QuickWatch Shift Ctrl F9 delete all 斷點 F10 單步執行 F11 進入調用的函數 Shift F11 跳出這次調用的函數 另外還可以用Disable all breakpoi…

leetcode350. 兩個數組的交集 II

給定兩個數組&#xff0c;編寫一個函數來計算它們的交集。 示例 1: 輸入: nums1 [1,2,2,1], nums2 [2,2] 輸出: [2,2] 示例 2: 輸入: nums1 [4,9,5], nums2 [9,4,9,8,4] 輸出: [4,9] 說明&#xff1a; 輸出結果中每個元素出現的次數&#xff0c;應與元素在兩個數組中出…

C語言: ---Linux下ulimit是什么鬼

其實ulimit的講解不屬于C或者C++ 語言范疇,他只是在我們日常開發或者線上linux運行環境不可缺少的工具。 比如我們要查看服務器崩潰的core文件,允許core文件產生,都需要ulimit -c命令調整。 比如我們設置的當前運行環境的棧空間過小,容易產生棧溢出,那么我們…

C語言: ---gdb查看內存和寄存器內容

gdb沒有CodeWarrior強大,但是也提供了查看寄存器的命令:(gdb) info register r1r1 0xbffffb40 3221224256(gdb) info registersr0 0x1000052c 268436780r1 0xbffffb40 3221224256r2 0x48026ea0 1208118944r3 …

leetcode52. N皇后 II 最強解法直接秒殺100%

n 皇后問題研究的是如何將 n 個皇后放置在 nn 的棋盤上&#xff0c;并且使皇后彼此之間不能相互攻擊。 上圖為 8 皇后問題的一種解法。 給定一個整數 n&#xff0c;返回 n 皇后不同的解決方案的數量。 示例: 輸入: 4 輸出: 2 解釋: 4 皇后問題存在如下兩個不同的解法。 [ […

C語言:---gdb多線程調試

1)恢復程序運行和單步調試 當程序被停住了,你可以用continue命令恢復程序的運行直到程序結束,或下一個斷點到來。也可以使用step或next命令單步跟蹤程序。 continue [ignore-count] c [ignore-count] fg [ignore-count] 恢復程序運行,直到程序結束,或是下一個斷點到來。ig…

leetcode145. 二叉樹的后序遍歷 意想不到的騷操作

給定一個二叉樹&#xff0c;返回它的 后序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [3,2,1] 進階: 遞歸算法很簡單&#xff0c;你可以通過迭代算法完成嗎&#xff1f; 思路&#xff1a;前序遍歷左右交換&#xff0c;然后倒序輸出 原因&am…

C++:29 --- C++繼承關系下的內存布局(下)

1 單繼承 C++ 提供繼承的目的是在不同的類型之間提取共性。比如,科學家對物種進行分類,從而有種、屬、綱等說法。有了這種層次結構,我們才可能將某些具備特定性質的東西歸入到最合適的分類層次上,如“懷孩子的是哺乳動物”。由于這些屬性可以被子類繼承,所以,我們只要知道…

C++:30 ---C++類成員,成員函數的內存布局

前面兩篇文章我相信大家反復讀了之后對這節不陌生了: 首先來看代碼: class Demo { public://靜態成員變量static const int sx = 0;//靜態函數static void SF1() {} public://成員變量int x; public://成員函數void F1() {cout << "Im from Demo::F1()" <…

leetcode119. 楊輝三角 II 你能比我代碼更短嗎?

給定一個非負索引 k&#xff0c;其中 k ≤ 33&#xff0c;返回楊輝三角的第 k 行。 示例: 輸入: 3 輸出: [1,3,3,1]按照定義寫即可。 class Solution:def getRow(self, rowIndex: int) -> List[int]:l[1]for i in range(rowIndex):l[1][l[j]l[j1] for j in range(len(l)-1…

C++:28 --- C++內存布局(上)

了解你所使用的編程語言究竟是如何實現的,對于C++程序員可能特別有意義。 首先,我們順次考察C兼容的結構(struct)的布局,單繼承,多重繼承,以及虛繼承;接著,我們講成員變量和成員函數的訪問,當然,這里面包含虛函數的情況;再接下來,我們考察構造函數,析構函數,以…

leetcode114. 二叉樹展開為鏈表

給定一個二叉樹&#xff0c;原地將它展開為鏈表。 例如&#xff0c;給定二叉樹 1 / \ 2 5 / \ \ 3 4 6 將其展開為&#xff1a; 1 \ 2 \ 3 \ 4 \ 5 \ 6 思路&#xff1a;所有左子樹的最右節點接上右子…

C++:26---動態內存管理new、delete

實在不好意思,到這里才給大家分享new和delete。 對于非內部數據類型的對象而言,光用malloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。 由于malloc/free是庫函數而不是運算符,不在編譯器控制權限…

使用Log4j為項目配置日志輸出應用詳細總結及示例演示.

Log4j組件構成 Log4j由三個重要的組件構成&#xff1a; 1.日志信息的優先級(Logger) 2.日志信息的輸出目的地(Appender) 3.日志信息的輸出格式(Layout)。 概要: 日志信息的優先級從高到低有ERROR、WARN、INFO、DEBUG&#xff0c;分別用來指定這條日志信息的重要程度&…

C++:27---new delete malloc free

上一節我講了new和delete,有人問這不是和C語言的malloc/free為C的標準庫函數差不多么 void* malloc(size_t size)//參數代表字節個數 void free(void* pointer)//參數代表內存地址new、delete則為C++的操作運算符,它調用的分別為賦值運算符重載operator new()和operator del…

C++:33---類成員指針

成員指針概述: 當初始化一個這樣的指針時,我們令其指向類的某個成員,但是不指定該成員所屬的對象直到使用成員指針時,才提供成員所屬的對象成員指針是指可以指向類的非靜態成員的指針一般情況下,指針指向一個對象,但是成員指針指向的是類的成員,而不是類的所創建出的對象…

C++:31---對象引用和賦值

一、對象移動概述 C++11標準引入了“對象移動”的概念對象移動的特性是:可以移動而非拷貝對象在C++舊標準中,沒有直接的方法移動對象。因此會有很多不必要的資源拷貝標準庫容器、string、share_ptr類既支持移動也支持拷貝。IO類和unique_ptr類可以移動但不能拷貝對象移動的特…

C++:34---union:聯合/共用體,一種節省空間的類

一、聯合(union)概述 聯合(union)是一種特殊的類一個union可以有多個數據成員,但是在任意時刻只有一個數據成員可以有值。當我們給union的某個成員賦值之后,該union的其它成員就變成未定義的狀態了。分配給一個union對象的存儲空間至少要能容納它的最大的數據成員類的某些…

leetcode205. 同構字符串 一般人一次做不對的簡單題

給定兩個字符串 s 和 t&#xff0c;判斷它們是否是同構的。 如果 s 中的字符可以被替換得到 t &#xff0c;那么這兩個字符串是同構的。 所有出現的字符都必須用另一個字符替換&#xff0c;同時保留字符的順序。兩個字符不能映射到同一個字符上&#xff0c;但字符可以映射自己…