Log4j详细使用教程.docx
- 文档编号:8176075
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:19
- 大小:565.74KB
Log4j详细使用教程.docx
《Log4j详细使用教程.docx》由会员分享,可在线阅读,更多相关《Log4j详细使用教程.docx(19页珍藏版)》请在冰豆网上搜索。
Log4j详细使用教程
日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录。
在apache网站:
jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。
一、入门实例
1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下
2、src同级创建并设置log4j.properties
###设置###
log4j.rootLogger=debug,stdout,D,E
###输出信息到控制抬###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p]%d{yyyy-MM-ddHH:
mm:
ss,SSS}method:
%l%n%m%n
###输出DEBUG级别以上的日志到=E:
//logs/error.log###
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=E:
//logs/log.log
log4j.appender.D.Append=true
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-ddHH:
mm:
ss}[%t:
%r]-[%p]%m%n
###输出ERROR级别以上的日志到=E:
//logs/error.log###
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File=E:
//logs/error.log
log4j.appender.E.Append=true
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-ddHH:
mm:
ss}[%t:
%r]-[%p]%m%n
3、设置日志内容
packagecom.mucfc;
importorg.apache.log4j.Logger;
/**
*@authorlinbingwen
*@2015年5月18日9:
14:
21
*/
publicclassTest{
privatestaticLoggerlogger=Logger.getLogger(Test.class);
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//System.out.println("Thisisprintlnmessage.");
//记录debug级别的信息
logger.debug("Thisisdebugmessage.");
//记录info级别的信息
logger.info("Thisisinfomessage.");
//记录error级别的信息
logger.error("Thisiserrormessage.");
}
}
4、输出结果
(1)首先是控制台的信息
(2)再来看输出的文件
内容如下,发现已按照要求输出到对应的文档中去了。
二、Log4j基本使用方法
Log4j由三个重要的组件构成:
日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。
日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
2.1、定义配置文件
其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。
但是,使用配置文件将使您的应用程序更加灵活。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。
下面我们介绍使用Java特性文件做为配置文件的方法:
1.配置根Logger,其语法为:
log4j.rootLogger=[level],appenderName,appenderName,…
其中,level是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName就是指B日志信息输出到哪个地方。
您可以同时指定多个输出目的地。
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(将日志信息以流格式发送到任意指定的地方)
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有以e几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m输出代码中指定的消息
%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r输出自应用启动到输出该log信息耗费的毫秒数
%c输出所属的类目,通常就是所在类的全名
%t输出产生该日志事件的线程名
%n输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:
%d{yyyMMMddHH:
mm:
ss,SSS},输出类似:
2002年10月18日22:
10:
28,921
%l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
举例:
Testlog4.main(TestLog4.java:
10)
2.2、在代码中使用Log4j
1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。
其语法为:
publicstaticLoggergetLogger(Stringname)
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。
Name一般取本类的名字,比如:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2.读取配置文件
当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:
BasicConfigurator.configure():
自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure(StringconfigFilename):
读取使用Java的特性文件编写的配置文件。
DOMConfigurator.configure(Stringfilename):
读取XML形式的配置文件。
3.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug(Objectmessage);
Logger.info(Objectmessage);
Logger.warn(Objectmessage);
Logger.error(Objectmessage);
2.3、日志级别
每个Logger都被了一个日志级别(loglevel),用来控制日志信息的输出。
日志级别从高到低分为:
A:
off最高等级,用于关闭所有日志记录。
B:
fatal指出每个严重的错误事件将会导致应用程序的退出。
C:
error指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:
warm表明会出现潜在的错误情形。
E:
info一般和在粗粒度级别上,强调应用程序的运行全程。
F:
debug一般用于细粒度级别上,对调试应用程序非常有帮助。
G:
all最低等级,用于打开所有日志记录。
上面这些级别是定义在org.apache.log4j.Level类中。
Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。
通过使用日志级别,可以控制应用程序中相应级别日志信息的输出。
例如,如果使用b了info级别,则应用程序中所有低于info级别的日志信息(如debug)将不会被打印出来。
三、Web项目中使用Log4j实例
上面代码描述了Log4j的简单应用,其实使用Log4j也就是这样简单方便。
当然除了上面的配置方法,还有其它,比如做一个J2EE应用,在J2EE应用使用Log4j,必须先在启动服务时加载Log4j的配置文件进行初始化,可以在web.xml中进行。
1、web应用的log4j使用基本上都采用:
新建一个servlet,这个servlet在init函数中为log4j执行配置。
一般就是读入配置文件。
所以需要在web.xml中为这个servlet配置,同时设定load-on-startup为1。
2、这个servlet配置log4j就是读出配置文件,然后调用configure函数。
这里有两个问题:
一、需要知道文件在哪里;二、需要正确的文件类型
3、配置文件位置在web.xml中配置一个param即可,路径一般是相对于web的root目录
4、文件类型一般有两种,一个是Java的property文件,另一种是xml文件
配置文件的大致内容:
log4j可以指定输出的log级别的最低等级,以及log的输出配置格式,每个log可以指定多个输出方式
(1)创建Web工程,整个工程最后目录如下
(2)web.xml配置如下:
xmlversion="1.0"encoding="UTF-8"?
>
xsi="http: //www.w3.org/2001/XMLSchema-instance" xmlns=" xsi: schemaLocation=" id="WebApp_ID"version="3.0"> --用来启动log4jConfigLocation的servlet--> (3)配置文件log4j.properties ###setloglevels### log4j.rootLogger=debug,stdout,D,E log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%-5p]%d{yyyy-MM-ddHH: mm: ss,SSS}method: %l%n%m%n log4j.appender.D=org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File=F: //logs/log.log log4j.appender.D.Append=true log4j.appender.D.Threshold=DEBUG log4j.appender.D.layout=org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-ddHH: mm: ss}[%t: %r]-[%p]%m%n log4j.appender.E=org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File=F: //logs/error.log log4j.appender.E.Append=true log4j.appender.E.Threshold=ERROR log4j.appender.E.layout=org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-ddHH: mm: ss}[%t: %r]-[%p]%m%n (4)web容器一来就初始化的servlet Log4JInitServlet.java packagecom.mucfc; importjava.io.File; importjava.io.IOException; importjavax.servlet.ServletConfig; importjavax.servlet.ServletContext; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.apache.log4j.BasicConfigurator; importorg.apache.log4j.PropertyConfigurator; /** *ServletimplementationclassLog4JInitServlet */ @WebServlet("/Log4JInitServlet") publicclassLog4JInitServletextendsHttpServlet{ privatestaticfinallongserialVersionUID=1L; /** *@seeHttpServlet#HttpServlet() */ publicLog4JInitServlet(){ super(); //TODOAuto-generatedconstructorstub } /** *@seeServlet#init(ServletConfig) */ publicvoidinit(ServletConfigconfig)throwsServletException{ System.out.println("Log4JInitServlet正在初始化log4j日志设置信息"); Stringlog4jLocation=config.getInitParameter("log4j-properties-location"); ServletContextsc=config.getServletContext(); if(log4jLocation==null){ System.err.println("***没有log4j-properties-location初始化的文件,所以使用BasicConfigurator初始化"); BasicConfigurator.configure(); }else{ StringwebAppPath=sc.getRealPath("/"); Stringlog4jProp=webAppPath+log4jLocation; FileyoMamaYesThisSaysYoMama=newFile(log4jProp); if(yoMamaYesThisSaysYoMama.exists()){ System.out.println("使用: "+log4jProp+"初始化日志设置信息"); PropertyConfigurator.configure(log4jProp); }else{ System.err.println("***"+log4jProp+"文件没有找到,所以使用BasicConfigurator初始化"); BasicConfigurator.configure(); } } super.init(config); } /** *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstub } /** *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstub } } 调用日志Log4JTestServlet,java packagecom.mucfc; importjava.io.IOException; importjavax.servlet.ServletConfig; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.Ht
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Log4j 详细 使用 教程