log4j主要由logger、appender和layout共3大組件構成
logger日誌記錄器,五種級別:
1:debug(Object)輸出調試級別的日誌信息,它是所有日誌級別中最低的
2:info(Object)輸出消息日誌,它高於debug級別日誌
3:warn(Object)輸出警告級別的日誌信息,高於info
4:error(Object)輸出錯誤級別的日誌信息,高於warn
5:fatal(Object)輸出致命錯誤級別的日誌信息,是最高的日誌級別
日誌輸出方法:
1:logger.debug(Object message)例:message="調試日誌"
2:logger.info(Object message)例:message="消息日誌"
3:logger.warn(Object message)例:message="警告日誌"
3:logger.error(Object message)例:message="錯誤日誌(數據庫連接失敗)"
4:logger.fatal(Object message)例:message="內存不足"
配置日誌:log4j.[loggerName]=[loggerLevel],AppenderName,……
1:loggerName:日誌名稱
2:loggerLevel:日誌級別
3:appenderName:日誌輸出目標,例如,控制檯console、文件file、或者以流的方式將日誌 信息輸出到任何輸出地點。
日誌繼承:所有的日誌都繼承了rootlogger日誌的定義。
例:log4j.logger.onelogger=warn,console
log4j.logger.onelogger.newlogger=,file
newlogger沒有定義日誌級別,但是繼承了onelogger的日誌級別。定義了輸出目標爲文件。
appender接口的實現類
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(將日誌信息以流格式發送到任意指定的地方)
6:org.apache.log4j.net.SMTPAppender(當特定的日誌時間發生時,一般是指發生錯誤或者重大錯誤時,發送郵件)
7:org.apache.log4j.net.SocketAppender(給遠程日誌服務器的網絡套接字節點發送日誌事件LoggingEvent對象)
8:org.apache.log4j.net.SocketHubAppender(給遠程日誌服務器羣的網絡套接字節點發送日誌事件LoggingEvent對象)
9:org.apache.log4j.net.SyslogAppender(給遠程異步日誌記錄的後臺程序(daemon)發送消息)
10:org.apache.log4j.net.TalnetAppender(一個專用於向只讀網絡套接字發送消息的log4jappender)
1)ConsoleAppender選項屬性
# -Threshold = DEBUG:指定日誌消息的輸出最低層次
# -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出
# -Target = System.err:默認值System.out,輸出到控制檯(err爲紅色,out爲黑色)
2)FileAppender選項屬性
# -Threshold = INFO:指定日誌消息的輸出最低層次
# -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出
# -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件
# -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容
# -Encoding = UTF-8:可以指定文件編碼格式
3)DailyRollingFileAppender選項屬性
# -Threshold = WARN:指定日誌消息的輸出最低層次
# -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出
# -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件
# -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容
# -DatePattern='.'yyyy-ww:每週滾動一次文件,即每週產生一個新的文件。還可以按用以下參數:
# '.'yyyy-MM:每月
# '.'yyyy-ww:每週
# '.'yyyy-MM-dd:每天
# '.'yyyy-MM-dd-a:每天兩次
# '.'yyyy-MM-dd-HH:每小時
# '.'yyyy-MM-dd-HH-mm:每分鐘
# -Encoding = UTF-8:可以指定文件編碼格式
4)RollingFileAppender選項屬性
# -Threshold = ERROR:指定日誌消息的輸出最低層次
# -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出
# -File = C:/log4j.log:指定消息輸出到C:/log4j.log文件
# -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容
# -MaxFileSize = 100KB:後綴可以是KB,MB,GB.在日誌文件到達該大小時,將會自動滾動.如:log4j.log.1
# -MaxBackupIndex = 2:指定可以產生的滾動文件的最大數
# -Encoding = UTF-8:可以指定文件編碼格式
Layout子類
1:org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
2:org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
3:org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)
4:org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
5:org.apache.log4j.xml.XMLLayout(以XML形式佈局)
1)HTMLLayout選項屬性
# -LocationInfo = TRUE:默認值false,輸出Java文件名稱和行號
# -Title=Struts Log Message:默認值 Log4J Log Messages
2)PatternLayout選項屬性
# -ConversionPattern = %m%n:格式化指定的消息
3)XMLLayout選項屬性
# -LocationInfo = TRUE:默認值false,輸出java文件名稱和行號
轉換字符表
-X號: X信息輸出時左對齊;
%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"輸出日誌信息換行
%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊。
%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。
%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊較遠輸出的字符截掉。
實例代碼(Javaee動態網頁項目日誌管理):
1.log4j.properties(文件應該放在webcontent目錄下,url路徑就是文件名,其他目錄下,以此類推)
#Logger
log4j.rootLogger=WARN,console
log4j.logger.onelogger=debug,file
log4j.logger.onelogger.newlogger=,file
#Appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:\log.htm
log4j.appender.file.MaxFileSize=10KB
log4j.appender.file.MaxBackupIndex=3
#Layout
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%t %p - %m%n
log4j.appender.file.layout=org.apache.log4j.HTMLLayout
2.jsp頁面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="org.apache.log4j.*"%>
<jsp:directive.page import="java.util.Date" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
body {
FONT-SIZE: 9pt;
FONT-FAMILY: 宋體
}
</style>
</head>
<body>
<%
Logger onelogger = Logger.getLogger("onelogger");
Logger newlogger = Logger.getLogger("onelogger.newLogger");
String path = getServletContext().getRealPath("log4j.properties");
PropertyConfigurator.configure(path);
onelogger.debug("調試:\t當前日期是" + new Date().toString() + "Log4J初始化完畢");
%>
<TABLE style="WIDTH: 755px" cellSpacing=0 cellPadding=0 width=757>
<TR>
<TD colSpan=3>
<TABLE
style="BACKGROUND-IMAGE: url(images/head.jpg); WIDTH: 755px; HEIGHT: 150px"
cellSpacing=0 cellPadding=0>
<TR>
<TD
style="VERTICAL-ALIGN: text-top; WIDTH: 80px; HEIGHT: 115px; TEXT-ALIGN: right"
colSpan=5></TD>
</TR>
<TR>
<TD> ◎ 首 頁 ◎
博客文章 ◎ 博客註冊</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD
style="BACKGROUND-IMAGE: url(images/bg.jpg); VERTICAL-ALIGN: middle; HEIGHT: 450px; TEXT-ALIGN: center"
colSpan=3>
<TABLE style="WIDTH: 224px" height=304 cellSpacing=0 cellPadding=0
align="center">
<TBODY>
<TR>
<TD style="WIDTH: 368px; HEIGHT: 21px; TEXT-ALIGN: center"
height=29><STRONG><SPAN style="COLOR: #993300">用戶註冊協議</SPAN></STRONG></TD>
</TR>
<TR>
<TD style="WIDTH: 368px; HEIGHT: 302px" rowSpan=2>
<%
onelogger.debug("開始讀取註冊協議信息");
%>
<TABLE
style="BORDER-RIGHT: black thin solid; BORDER-TOP: black thin solid; BORDER-LEFT: black thin solid; WIDTH: 369px; BORDER-BOTTOM: black thin solid"
align=center>
<TR>
<TD width="354" colSpan=4 rowSpan=4
style="HEIGHT: 15px; TEXT-ALIGN: left;"> 爲維護網上公共秩序和社會穩定,請您自覺遵守以下條款:
<BR> 爲了更好的管理和維護網站,請您自覺遵守以下條款:
<p>
(一)不得利用本網站進行商業廣告宣傳; <br> (二)不得利用本網站發送非法文章;<br>
(三)不得利用本網站進行上傳非法圖片; <br> (四)互相尊重,對自己的言論和行爲負責; <br>
(五)普通用戶欲刪除文章、評論、圖片等信息,請與管理員聯繫;<br>
(六)本網站版權歸明日科技公司,不得對本網站進行轉載或作爲私用。
</p>
<p>
<br> <br>
</p>
</TD>
</TR>
<TR></TR>
<TR></TR>
<TR></TR>
<TR>
<TD style="HEIGHT: 8px; TEXT-ALIGN: center" colSpan=4><INPUT
id=Button1 type=submit value=同意以上條款> <INPUT
id=Button2 type=submit value=不同意></TD>
</TR>
<%
onelogger.debug("註冊協議信息讀取完畢");
%>
</TABLE>
</TD>
</TR>
<TR></TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TR>
<TD align="center" background=images/footer.jpg colSpan=3 height=82>
<%
onelogger.info("讀取版權消息");
%> 歡迎訪問博客網 請使用IE 6.0 在1024×768分辨率下瀏覽本網站<BR> CopyRight@ 2006
明日科技開發 <%
onelogger.info("版權消息讀取完畢");
%>
</TD>
</TR>
</TBODY>
</TABLE>
<%
onelogger.error("數據庫關閉失敗");
onelogger.fatal("系統內存不足,無法繼續完成註冊。");
%>
</body>
</html>
結果展示: