您好,欢迎访问一九零五行业门户网

Log4j的基本使用方法介绍

简单配置
#指定logger # 配置logger组件  # 设定log4j的日志级别(error warn info  debug) # 输出目的地(console, logfile是appender的名字,是自己定义的,后面才赋予具体的含义) log4j.rootlogger=debug, console, logfile ################################################################################################################### #指定appender(目的地) #设定logger的console(appender的名字)的appender类型为控制台输出 #org.apache.log4j.consoleappender 表明 console是控制台输出 log4j.appender.console=org.apache.log4j.consoleappender #输出的格式 #设定console的appender布局layout #org.apache.log4j.patternlayout(可以灵活地指定布局模式)包含选项: #                     conversionpattern=%m%n :指定怎样格式化指定的消息 log4j.appender.console.layout=org.apache.log4j.patternlayout #2009-09-29 07:30:43,265 info com.itcast.web.controller.searchcdservlet.doget() - e log4j.appender.console.layout.conversionpattern=%d %p %c.%m() - %m%n ################################################################################################################### #设定logger的logfile(appender的名字)的appender类型为文件大小到达指定尺寸的时候产生一个新的文件 log4j.appender.logfile=org.apache.log4j.rollingfileappender #设定文件的输出路径(指定文件的名字和路径,tomcat的启动路径) log4j.appender.logfile.file=../logs/logstrore.log #设定后缀可以是kb, mb 或者是 gb. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logstrore.log.1文件 log4j.appender.logfile.maxfilesize=2048kb #keep three backup files.指定可以产生的滚动文件的最大数 log4j.appender.logfile.maxbackupindex=4#设定logfile的appender布局layout log4j.appender.logfile.layout=org.apache.log4j.patternlayout log4j.appender.logfile.layout.conversionpattern=%d %p %c.%m() - %m%n ###################################################################################################################
log4j简介 
log4j是apache的一个开放源代码项目,它是一个日志操作包,通过使用log4j,可以指定日志信息输出的目的地,如控制台、文件、cui组件、nt的事件记录器;还可以控制每一条日志输出格式。此外,通过定义日志信息的级别,能够非常细致地控制日志的输出,最令人感兴趣的是,这些功能可以通过一个配置文件来灵活进行配置,而不需要修改应程序代码。
在应用程序中输出日志有3个目的:
l  监视代码中变量的变化情况,把数据周期性记录到文件中供其他应用进行统计分析工作
l  跟踪代码运行时轨迹,作为日后审计的依据
l  担当集成开发环境中的调试器的作用,向文件和控制台打印代码的调试信息
要在程序中输出日志,最普通的做法就是在代码中嵌入语句,这些打印语句可以把日志输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥代码的主体。
在强调可重用组件的今天,除了自己从头到尾开发一个可重用的日志操作类名,apache为我们提供了一个强有力的现成的日志操作包log4j。
log4j主要由三大组件构成:
l  logger:负责生成日志,并能够对日志信息进行分类筛选,通俗地讲就是决定什么日志信息应该输出,什么日志信息应该被忽略
l  appender:定义了日志信息输出的目的地,指定日志信息应该被输出到什么地方,这些地方可以是控制台、文件、网络设备等
l  layout: 指定日志信息的输出格式
这个3个组件协同工作,使得开发者能够依据日志信息类别记录信息,并能够在程序运行期间,控制日志信息的输出格式以及日志存放地点。
一个logger可以有多个appender,这意味着日志信息可以同时输出到多个设备上,每个appender都对应一种layout,layout决定了输出日志信息的格式。
假定根据实际需要,要求程序中的日志信息既能输出到程序运行的控制台下,又能输出到指定的文件中,并且当日志信息输出到控制台时simpllayout布局,当日志信息输出到文件时patternlayout布局,此时logger、appender和layout3个组件的关系如图
appender组件 (指定输出目的)
log4j的appender组件决定将日志信息输出到什么地方。日前log4j的appender支持将日志信息输出到以下的目的:
l  控制台(console)
l  文件
l  gui组件
一个logger可以同时对应多个appender,也就是说,一个logger的日志信息可以同时输出到多个目的地,例如:要为rootlogger配置两个appender; 一个是file,一个是console,则可以采用如下配置代码:
log4j.rootlogger =warn,file,console          rootlogger  配置日志级别、输出目的;
log4j.appender.file=org.apache.log4jrollingfileappender
     log4j.appender.file=log.txt
log4j.appender.console=org.apache.log4j.consoleappender
layout组件
layout组件用来决定日志的输出格式,它有以下几种类型
l  org.apache.log4j.htmllayout(以html表格形式布局)
l  org.apache.log4j.patternlayout(可以灵活地指定布局模式)
l  org.apache.log4j.simplelayout(包含日志信息级别和信息字符串)
l  org.apache.log4j.ttcclayout(包含日志产生的时间、线程和类别等信息)
log4j的基本使用方法在应用程序中使用log4j,首先在一个配置文件中配置log4j的各个组件,然后就可以在程序中通过log4japi来操作日志
定义配置文件
log4j由3个重要的组件构成:logger、appender和layout。log4j支持在程序中以编程的方式设置这些组件,还支持通过配置文件来配置组件,后一种方式更为灵活。
log4j支持两种配置文件格式,一种是xml格式,一种是java属性文件,
1. 配置logger组件
其语法为:
      log4j.rootlogger = [ level ] , appendername1, appendername2, …
举例:
    log4j.rootlogger =warn,file,console
level : 是日志记录的优先级,分为off、fatal、error、warn、info、debug、all或者您定义的级别。
log4j建议只使用四个级别,优先级从高到低分别是error>warn>info>debug。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了info级别,则应用程序中所有debug级别的日志信息将不被打印出来。
appendername:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
all:打印所有日志。
off:关闭所有的日志。
     例如:log4j.rootlogger=info,a1,b2,c3
2. 配置appender组件
其语法为:
     log4j.appender.appendername =fully.qualified.name.of.appender.class.
举例:
   log4j.appender.console=org.apache.log4j.consoleappender
fully.qualified.name.of.appender.class 可以指定下面五个目的地中的一个:
          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(将日志信息以流格式发送到任意指定的地方)
a.consoleappender选项
    threshold=warn:指定日志消息的输出最低层次。
     immediateflush=true:默认值是true,意谓着所有的消息都会被立即输出。
     target=system.err:默认情况下是:system.out,指定输出控制台
b.fileappender 选项
threshold=warn:指定日志消息的输出最低层次。
immediateflush=true:默认值是true,意谓着所有的消息都会被立即输出。
file=mylog.txt:指定消息输出到mylog.txt文件。
     append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖
指定的文件内容。
c.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: 每分钟
d.rollingfileappender 选项
           threshold=warn:指定日志消息的输出最低层次。
            immediateflush=true:默认值是true,意谓着所有的消息都会被立即输出。
            file=mylog.log:指定消息输出到mylog.txt文件。
            append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指
定的文件内容。
            maxfilesize=100kb: 后缀可以是kb, mb 或者是 gb. 在日志文件到达该大小
时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
            maxbackupindex=2:指定可以产生的滚动文件的最大数。
3、配置日志信息的格式
其语法为:
1)log4j.appender.appendername.layout=fully.qualified.name.of.layout.class
        fully.qualified.name.of.layout.class 可以指定下面4个格式中的一个:
举例:log4j.appender.console.layout=org.apache.log4j.patternlayout
      log4j.appender.console.layout.conversionpattern=%d %p %c.%m()-%m%n
1.org.apache.log4j.htmllayout(以html表格形式布局)包含选项:
locationinfo=true:默认值是false,输出java文件名称和行号
                      title=my app file: 默认值是 log4j log messages.
2.org.apache.log4j.patternlayout(可以灵活地指定布局模式)包含选项:
conversionpattern=%m%n :指定怎样格式化指定的消息。
3.org.apache.log4j.simplelayout(包含日志信息的级别和信息字符串)
       4.org.apache.log4j.ttcclayout(包含日志产生的时间、线程、类别等等信息)
        2)log4j.appender.a1.layout.conversionpattern=%-4r %-5p %d{yyyy-mm-dd hh:mm:sss} %c %m%n
      日志信息格式中几个符号所代表的含义:
 -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输出日志信息换行
%m  代表方法的名字
         可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
         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,需要用到log4j的jar文件。
在程序中使用log4j包含以下过程:
l  获得日志记录器
l  读取配置文件,配置log4j环境
l  输出日志信息
在进入学习log4j之前,我们要了解通用日志包中的两个常用接口logfactory和log,下面分别介绍它们的用法。
log接口通用日志包把日志消息分为6种级别:fatal(致命的)、error(错误)、warn(警告)、info(信息)、debug(调试)和trace(细节)。其中fatal级别最高,trace级别最低。通用日志包采用日志级别机制,可以灵活的控制输出的日志内容。
org.apache.commons.logging.log接口代表日志器,它提供了一组输出日志的方法:
l  fatal(object message): 输出fatal级别的日志消息。
l  error(object message): 输出error级别的日志消息。
l  ……
l  trace(object message): 输出trace级别的日志消息。
    对于以上输出日志的方法,只有当它输出日志的级别大于或等于为日志其配置的日志级别时,这个方法才会被真正执行。例如,如果日志器的日志级别为warn,那么在程序中,它的fatal()、error()和warn()方法会被执行,而info()、debug()和trace()方法不会被执行。
log接口还提供了一组判断是否允许输出特定级别的日志消息的方法:
l  isfatalenabled()
l  iserrorenabled()
l  ……
l  istraceenabled()
在程序输出某种级别的日志消息之前,提倡先调用以上方法来判断该级别的日志是否允许输出,这有助于提高应用的性能。例如以下代码先把日志消息添加到stringbuffer中,最后在调用日志器的debug()方法输出日志:
stringbuffer buf = new stringbuffer();
buf.append(“login successsul - ”);
buf.append(“name:”);
buf.append(username);
log.debug(buf.tostring());
对于以上代码,如果日志器实际上不允许输出debug级别的日志,那么执行日志器的debug()方法不会输出任何消息,此时向stringbuffer中添加消息的一大串操做都将是多余的。为了提高性能,可以合理的使用isdebugenabled()方法,避免应用执行多余的操作:
if(log.isdebugenabled){
stringbuffer buf = new stringbuffer();
buf.append(“login successsul - ”);
buf.append(“name:”);
buf.append(username);
log.debug(bug.tostring());
}
(二)logfactory接口
org.apache.commons.logging.logfactory接口提供了获得日志器实例的两个静态方法:
public static log getlog(string name)throws logconfigurationexception;
public static log getlog(class class) throws logconfigurationexception;
第一个getlog()方法以name参数作为日志器的名字;第二个getlog()方法以class参数指定的类的名字作为日志器的名字,以下是第二个getlog()方法的一种实现方式:
public static log getlog(class class) throws logconfigurationexception{
getlog(class.getname);     //call getlog(string name)
}
 小结
log4j主要由3大组件构成:logger、appender和layout。logger控制日志信息的输出;appender决定日志信息的输出目的地;layout决定日志信息的输出格式。log4j允许用户在配置文件中灵活地配置这些组件。在程序中使用log4j非常方便,只要先取得日志记录器,然后读取配置文件并配置log4j环境,接下来就可以在程序中任何需要输出日志的地方,调用logger类的适当方法来生成日志。
以上就是log4j的基本使用方法介绍的详细内容。
其它类似信息

推荐信息