新知识-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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章