log4j用法和配置学习笔记

来源:互联网 发布:淘宝hd降级 编辑:程序博客网 时间:2024/06/06 03:32
log4j的主要功能是提供日志输出,当然也提供控制台输出,使用此组件则可以很好地代替开发时需要使用System.out来打印输出的功能,从而避免在生产环境中控制台输出不必要的消息。
log4j下载地址:http://logging.apache.org/log4j/1.2/download.html
如果你需要查看API,地址是:http://logging.apache.org/log4j/1.2/apidocs/index.html

测试代码:
public class TestLog4J { private static Logger logger = Logger.getLogger(TestLog4J.class); public static void main(String[] args) {  //默认配置,将日志信息输出到控制台,不需要配置log4j.properties文件// BasicConfigurator.configure();  //使用log4j.properties进行配置  //项目相对路径需要把package都写进来才行  PropertyConfigurator.configure("src/rich/util/config/log4j.properties");   logger.error("This is a error message");  logger.warn("This is a warning message");  logger.info("This is a info message");  logger.debug("This is a debug message"); }}

配置文件log4j.properties
#根Logger,配置优先级和输出源名字,这里定义为appender1log4j.rootLogger=debug,appender1#输出到控制台ConsoleAppenderlog4j.appender.appender1=org.apache.log4j.ConsoleAppender#输出样式为TTCLayout,包含日志产生的时间、线程、类别等等信息log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout

运行结果:


Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

简而言之,在编写log4j.properties文件时需要指定:
1.根目录
2.输出地(控制台,文件等)
3.输出样式

Log4j的基本语法:
1)配置根目录Logger,其语法为:
log4j.rootLogger=[Level], appdenderNameA, appenderNameB, ...
其中Level是日志记录的有先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL和你自己的级别,Log4j只建议四个级别,分别是ERROR、WARN、INFO、DEBUG,优先级依次降低。优先级用于输出的日志记录的开关,例如定义了INFO级别,那么低级别DEBUG的日志记录就不会输出(在代码中调用了Logger.debug方法的输出信息)。appdenderNameA定义了输出源的名字,由用户自定义,可定义多个输出源。

例子:
log4j.rootLogger=debug,appender1 
将Logger的优先级定义为debug,输出源名字为appender1

2)定义输出源的输出目的地Appender,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class,其中,Log4j提供的appender有:
    ①org.apache.log4j.ConsoleAppender(控制台)
    ②org.apache.log4j.FileAppender(文件)
    ③org.apache.log4j.DailyRollingFileAppender(以日期为界限的日志文件,如名字,一般一天一个)
    ④org.apache.log4j.RollingFileAppender(以文件大小为界限,达到指定大小就自动重新生成另一个日志文件)
    ⑤org.apache.log4j.WriterAppender(将日志变成流格式发送到指定的地方)

  • ConsoleAppender选项 
            Threshold=WARN:指定日志消息的输出最低层次。
            ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
            Target=System.err:默认情况下是:System.out,指定输出控制台
  • FileAppender 选项 
            Threshold=WARN:指定日志消息的输出最低层次。
            ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
            File=mylog.txt:指定消息输出到mylog.txt文件。
            Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
  • 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: 每分钟
  • RollingFileAppender 选项 
            Threshold=WARN:指定日志消息的输出最低层次。
            ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
            File=mylog.txt:指定消息输出到mylog.txt文件。
            Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
            MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
            MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

例子:
ConsoleAppender
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
上面定义的输出源appender1的输出目的地为控制台ConsoleAppender

FileAppender
log4j.appender.appender1=org.apache.log4j.FileAppenderlog4j.appender.appender1.File=log.txt
多定义了一个File属性

DailyRollingFileAppender 
log4j.appender.appender1=org.apache.log4j.DailyRollingFileAppender  log4j.appender.appender1.file=log.txtlog4j.appender.appender1.DatePattern='.'yyyy-MM-dd  
定义每天输出一个log

RollingFileAppender
log4j.appender.appender1=org.apache.log4j.RollingFileAppender  log4j.appender.appender1.File=logs.txt  log4j.appender.appender1.MaxFileSize=100KB  log4j.appender.appender1.MaxBackupIndex=10 
定义了当大小超过100KB的时候生成新日志文件,最大不超过10个

3)定义输出样式(布局)Layout,其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class,其中Log4j提供的Layout有:
    ①org.apache.log4j.HTMLLayout(以hmtl表单格式)
    ②org.apache.log4j.TTCCLayout(线程,时间,类别等信息)
    ③org.apache.log4j.SimpleLayout(日志信息级别和信息本身的字符串)
    ④org.apache.log4j.PatternLayout(灵活的字符串格式,默认只输出信息字符串)
例子
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
上面定义的输出员appender1的输出样式为线程名字,信息级别和信息内容组成。

Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下:
        %m 输出代码中指定的消息 
   %p 输出优先级,即 DEBUG  INFO  WARN  ERROR  FATAL
   %r 输出自应用启动到输出该 log 信息耗费的毫秒数 
   %c 输出所属的类目,通常就是所在类的全名 
   %t 输出产生该日志事件的线程名 
   %n 输出一个回车换行符, Windows 平台为 “rn”  Unix 平台为 “n”
   %d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在其后指定格式,比如: %d{yyy MMM dd HH:mm:ss,SSS} ,输出类似: 2002  10  18  22  10  28  921
   %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例: Testlog4.main(TestLog4.java:10)

例子:

log4j.appender.appender1.layout.ConversionPattern = %-4r [%t] %-5p %c - %m%n
结果:


格式字母前带数字是当内容不够时进行左对齐或者右对齐,正数为左对齐,负数为右对齐。还有限制字数如 %c{10}等功能,若有特殊需求,可以参考以下内容:http://blog.csdn.net/guoquanyou/article/details/5689652

最后提供一个数据库格式的日志文件例子:
log4j.rootLogger=DEBUG,appender1log4j.appender.appender1=org.apache.log4j.jdbc.JDBCAppender log4j.appender.appender1.BufferSize=1 log4j.appender.appender1.URL=jdbc:mysql://localhost:3306/test log4j.appender.appender1.driver=com.mysql.jdbc.Driver log4j.appender.appender1.user=root log4j.appender.appender1.password= log4j.appender.appender1.sql=INSERT INTO LOG4J_INFO(LOG_TIME, THREAD, LOG_LEVEL, CLASS, MESSAGE) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m') log4j.appender.appender1.layout=org.apache.log4j.PatternLayout log4j.appender.appender1.layout.ConversionPattern=%5p | %c{1}-%M [%d{yyyy-MM-dd HH:mm:ss}] - %m%n 


(下一部分是进行在Servlet和Spring当中配置log4j日志信息)

参考资料:
http://www.cnblogs.com/simle/archive/2011/09/29/2195341.html
http://blog.csdn.net/anlina_1984/article/details/5313023






0 0
原创粉丝点击