log4j.properties 详解与配置步骤

来源:互联网 发布:知乎rss订阅地址 编辑:程序博客网 时间:2024/06/10 23:29
1.输出级别的种类ERROR、WARN、INFO、DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失INFO 为一般要显示的信息,比如登录登出DEBUG 为程序的调试信息2.配置日志信息输出目的地log4j.appender.appenderName = fully.qualified.name.of.appender.class1.org.apache.log4j.ConsoleAppender(控制台)2.org.apache.log4j.FileAppender(文件)3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)3.配置日志信息的格式log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)4.控制台选项Threshold=DEBUG:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。Target=System.err:默认情况下是:System.out,指定输出控制台FileAppender 选项Threshold=DEBUF:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。File=mylog.txt:指定消息输出到mylog.txt文件。Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。RollingFileAppender 选项Threshold=DEBUG:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。File=mylog.txt:指定消息输出到mylog.txt文件。Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。MaxBackupIndex=2:指定可以产生的滚动文件的最大数。log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n5.日志信息格式中几个符号所代表的含义:-X号: X信息输出时左对齐; %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:20021018221028921 %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"输出日志信息换行可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 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.properties的配置1、配置步骤  1)  在应用程序中使用log4j  2)     把log4j-*.*jar放入CLASSPATH变量中  3)     新建一个配置文件log4j.properties,放于bin文件下2.新建一个配置文件log4j.properties,如: log4j.rootLogger=WARN, stdout, R  log4j.appender.stdout=org.apache.log4j.ConsoleAppender  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  # Pattern to output the caller's file name and line number.  #log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n  # Print the date in ISO 8601 format  log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n  log4j.appender.R=org.apache.log4j.RollingFileAppender  log4j.appender.R.File=example.log  log4j.appender.R.MaxFileSize=100KB  # Keep one backup file  log4j.appender.R.MaxBackupIndex=1  log4j.appender.R.layout=org.apache.log4j.PatternLayout  log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n  # Print only messages of level WARN or above in the package com.foo.  log4j.logger.com.foo=WARN- %n - 换行- %m - 日志内容- %p - 日志级别(FATAL,   ERROR,   WARN,   INFO,   DEBUG   or   custom)- %r - 程序启动到现在的毫秒数- %% - percent   sign   in   output- %t - 当前线程名- %d   -  日期和时间,-     常用的格式有 %d{DATE}, %d{ABSOLUTE}, %d{HH:mm:ss,SSS}, %d{ddMMyyyy HH:mm:ss,SSS}。。。- %l - 同 %F%L%C%M-     %F - java源文件名- %L - java源码行数-     %C - java类名,%C{1} 输出最后一个元素-     %M-java方法名      %n - 换行        %m - 日志内容        %p - 日志级别(FATAL,  ERROR,  WARN,  INFO,  DEBUG  or  custom)        %r - 程序启动到现在的毫秒数        %% - percent  sign  in  output        %t - 当前线程名        %d  -  日期和时间,                常用的格式有 %d{DATE}, %d{ABSOLUTE}, %d{HH:mm:ss,SSS}, %d{ddMMyyyy HH:mm:ss,SSS}。。。        %l - 同 %F%L%C%M                %F - java源文件名        %L - java源码行数                %C - java类名,%C{1} 输出最后一个元素                %M-java方法名示例:Java代码- [%d{HH\:mm\:ss\:SSS}][%p] (%c\:%L) - %m%n[%d{HH\:mm\:ss\:SSS}][%p] (%c\:%L) - %m%nlog4j输出多个自定义日志文件如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?先看一个常见的log4j.properties文件,它是在控制台和test.log文件中记录日志:代码如下:log4j.rootLogger=DEBUG, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=log/test.loglog4j.appender.logfile.MaxFileSize=128MBlog4j.appender.logfile.MaxBackupIndex=3log4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义:代码如下:private static Log logger1=LogFactory.getLog("mylogger1");private static Log logger2=LogFactory.getLog("mylogger2");log4j.properties中配置如下:代码如下:log4j.logger.mylogger1=DEBUG,test1log4j.appender.test1=org.apache.log4j.FileAppenderlog4j.appender.test1.File=log/test1.loglog4j.appender.test1.layout=org.apache.log4j.PatternLayoutlog4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%nlog4j.logger.mylogger2=DEBUG,test2log4j.appender.test2=org.apache.log4j.FileAppenderlog4j.appender.test2.File=log/test2.loglog4j.appender.test2.layout=org.apache.log4j.PatternLayoutlog4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n不同日志要使用不同的logger(如输出到test1.log的要用logger1.info("abc"))。还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:log4j.additivity. mylogger1=false它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方了。但是这种方式有个小缺陷,那就是打印的日志中类名只能是mylogger或者mylogger2。2动态配置路径若程序需要的日志路径需要不断的变化,而又不可能每次都去改配置文件,此时可以利用环境变量来解决。log4j的配置如下:代码如下:log4j.rootLogger=DEBUG,INFOLOG,DEBUGLOG#info loglog4j.appender.INFOLOG=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.INFOLOG.File=${log.dir}/${log.info.file}log4j.appender.INFOLOG.DatePattern=.yyyy-MM-ddlog4j.appender.INFOLOG.Threshold=INFOlog4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayoutlog4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n#debug loglog4j.appender.DEBUGLOG=org.apache.log4j.RollingFileAppenderlog4j.appender.DEBUGLOG.File=${log.dir}/${log.debug.file}log4j.appender.DEBUGLOG.Threshold=DEBUGlog4j.appender.DEBUGLOG.MaxFileSize=128MBlog4j.appender.DEBUGLOG.MaxBackupIndex=3log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayoutlog4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n此时,在使用log打印日志之前,需要利用System定义日志的输出路径和文件名的环境变量:代码如下:System.setProperty(“log.dir”, logDir);System.setProperty(“log.info.file”, infoLogFileName);System.setProperty(“log.debug.file”, debugLogFileName);附:Pattern参数的格式含义%c输出日志信息所属的类的全名%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2013-8-19- 22:10:28%f输出日志信息所属的类的类名%l输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行%m输出代码中指定的信息,如log(message)中的message%n输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推%r输出自应用启动到输出该日志信息所耗费的毫秒数%t输出产生该日志事件的线程名
原创粉丝点击