新知識-log4j日誌管理-知識點-配置步驟-實例

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(控制檯)
2org.apache.log4j.FileAppender(文件)
3org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
4org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
5org.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>

結果展示



發佈了6 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章