log4J日志框架

来源:互联网 发布:可以拍电影的软件 编辑:程序博客网 时间:2024/06/05 18:41

      • 常见的日志框架
      • 各种jar包的总结
    • Log4j的介绍
      • 定义配置文件
        • 配置日志信息输出目的地
        • 配置日志信息的格式

常见的日志框架

log4j
log4j2
logback
commons-logging

各种jar包的总结

  • log4j1:

    • log4j:log4j1的全部内容
  • log4j2:

    • log4j-api:log4j2定义的API
    • log4j-core:log4j2上述API的实现
  • logback:

    • logback-core:logback的核心包
    • logback-classic:logback实现了slf4j的API
  • commons-logging:

    • commons-logging:commons-logging的原生全部内容
    • log4j-jcl:commons-logging到log4j2的桥梁
    • jcl-over-slf4j:commons-logging到slf4j的桥梁
  • slf4j转向某个实际的日志框架:
    场景介绍:如 使用slf4j的API进行编程,底层想使用log4j1来进行实际的日志输出,这就是slf4j-log4j12干的事。
    • slf4j-jdk14:slf4j到jdk-logging的桥梁
    • slf4j-log4j12:slf4j到log4j1的桥梁
    • log4j-slf4j-impl:slf4j到log4j2的桥梁
    • logback-classic:slf4j到logback的桥梁
    • slf4j-jcl:slf4j到commons-logging的桥梁
  • 某个实际的日志框架转向slf4j:
    场景介绍:如 使用log4j1的API进行编程,但是想最终通过logback来进行输出,所以就需要先将log4j1的日志输出转交给slf4j来输出,slf4j再交给logback来输出。将log4j1的输出转给slf4j,这就是log4j-over-slf4j做的事
    这一部分主要用来进行实际的日志框架之间的切换(下文会详细讲解)
    • jul-to-slf4j:jdk-logging到slf4j的桥梁
    • log4j-over-slf4j:log4j1到slf4j的桥梁
    • jcl-over-slf4j:commons-logging到slf4j的桥梁

Log4j的介绍

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

定义配置文件

  其实您也可以完全不使用配置文件,而是在代码中配置 Log4j 环境。但是,使用配置文件将使您的应用程序更加灵活。 Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是 Java 特性文件(键 = 值 properties 文件)。下面我们介绍使用 Java 特性文件做为配置文件的方法:

  • 配置根 Logger ,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中, level 是日志记录的优先级,分为 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 ALL 或者您定义的级别。 Log4j 建议只使用四个级别 ,优先级从高到低分别是 ERROR 、 WARN 、 INFO 、 DEBUG 。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了 INFO 级别,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来 。 appenderName 就是指 B 日志信息输出到哪个地方。您可以同时指定多个输出目的地。

  • 配置日志信息输出目的地 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 (将日志信息以流格式发送到任意指定的地方)
  • 配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

其中, Log4j 提供的 layout 有以下几种:

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{yyy MMM dd HH:mm:ss,SSS} ,输出类似: 2002 年 10 月 18 日 22 : 10 : 28 , 921%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例: Testlog4.main(TestLog4.java:10) 

配置日志信息输出目的地

log4j.appender.appenderName = fully.qualified.name.of.appender.class
//”fully.qualified.name.of.appender.class” 可以指定下面五个目的地中的一个:

org.apache.log4j.ConsoleAppender (控制台)org.apache.log4j.FileAppender (文件)org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件)org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
  1. ConsoleAppender 选项
Threshold=WARN: 指定日志消息的输出最低层次。ImmediateFlush=true: 默认值是 true, 意谓着所有的消息都会被立即输出。Target=System.err :默认情况下是: System.out, 指定输出控制台
  1. FileAppender 选项
Threshold=WARN: 指定日志消息的输出最低层次。ImmediateFlush=true: 默认值是 true, 意谓着所有的消息都会被立即输出。File=mylog.txt: 指定消息输出到 mylog.txt 文件。Append=false: 默认值是 true, 即将消息增加到指定文件中, false 指将消息覆盖指定的文件内容。
  1. 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: 每分钟
  1. 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: 指定可以产生的滚动文件的最大数。

实际应用:
   log4j.appender.A1=org.apache.log4j.ConsoleAppender // 这里指定了日志输出的第一个位置 A1 是控制台 ConsoleAppender   

配置日志信息的格式

3 、配置日志信息的格式,其语法为:
   A. log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
“fully.qualified.name.of.layout.class” 可以指定下面 4 个格式中的一个:

org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),org.apache.log4j.PatternLayout (可以灵活地指定布局模式),org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)
  1. HTMLLayout 选项
LocationInfo=true: 默认值是 false, 输出 java 文件名称和行号Title=my app file: 默认值是 Log4J Log Messages.
  1. PatternLayout 选项
ConversionPattern=%m%n : 指定怎样格式化指定的消息。
  1. XMLLayout 选项
LocationInfo=true: 默认值是 false, 输出 java 文件和行号

实际应用:

log4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.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" 输出日志信息换行

可以在 % 与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

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.rootLogger=INFO,A1 , B2log4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n

http://blog.csdn.net/woshixuye/article/details/20858239
http://my.oschina.net/pingpangkuangmo/blog/410224

http://www.blogjava.net/hwpok/archive/2008/08/23/223891.html
http://blog.csdn.net/anlina_1984/article/details/5313023/

0 0
原创粉丝点击