Log4j

什么是Log4j

- log4j是一个用Java编写的可靠,快速和灵活的日志框架(API)
- Log4j是高度可配置的,并可通过在运行时的外部文件配置
- Log4j中有三个主要组成部分
  - loggers: 负责捕获记录信息
  - appenders : 负责发布日志信息,以不同的首选目的地
  - layouts: 负责格式化不同风格的日志信息

log4j 特性

- log4j的是线程安全的
- log4j是基于一个名为记录器的层次结构
- log4j支持国际化
- log4j设计从一开始就是处理Java异常
- log4j使用多个层次,即ALL,TRACE,DEBUG,INFO,WARN,ERROR和FATAL
- 日志输出的格式可以通过扩展Layout类容易地改变
- 日志输出的目标,以及在写入策略可通过实现Appender程序接口改变
- log4j的支持每个记录器多输出追加器(appender)

log4j配置

    #配置根
    Loggerlog4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 , …
    #配置日志信息输出目的地
    Appenderlog4j.appender.appenderName  =  fully.qualified.name.of.appender.class   log4j.appender.appenderName.option1  =  value1   
    …   
    log4j.appender.appenderName.optionN  =  valueN 
    #配置日志信息的格式(布局)
    log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class   log4j.appender.appenderName.layout.option1  =  value1   
    …   
    log4j.appender.appenderName.layout.optionN  =  valueN



- [ level ]是日志输出级别
  ALL	最低等级的,用于打开所有日志记录
  DEBUG	指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息
  ERROR	指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别
  FATAL	指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了
  INFO	消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志
  OFF	最高等级的,用于关闭所有日志记录
  TRACE	designates finer-grained informational events than the DEBUG 很低的日志级别,一般不会使用
  WARN	表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示
  
- Appender 为日志输出目的地
  org.apache.log4j.ConsoleAppender(控制台),
  org.apache.log4j.FileAppender(文件),
  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
- Layout:日志输出格式
  org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
- 打印参数
  - %m   输出代码中指定的消息
  - %p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  - %r   输出自应用启动到输出该log信息耗费的毫秒数 
  - %c   输出所属的类目,通常就是所在类的全名 
  - %t   输出产生该日志事件的线程名 
  - %n   输出一个回车换行符,Windows平台为“/r/n”,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 ) 

配置实例

    ### set log levels ###
    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 =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
    
    ### 输出到日志文件 ###
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File = logs/log.log
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
    ### 保存异常信息到单独文件 ###
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File = logs/error.log ## 异常日志文件名
    log4j.appender.E.Append = true
    log4j.appender.E.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    

    ##JAVA代码中使用logger对象
    
    public   class  TestLog4j  {     
    	public   static   void  main(String[] args)  {        
    		PropertyConfigurator.configure( \" D:/Code/conf/log4j.properties \" );        
    		Logger logger  =  Logger.getLogger(TestLog4j. class );        
    		logger.debug( \" debug \" );        
    		logger.error( \" error \" );    
    	} 
    }



SSH中使用Log4j

- 在web. 中的详细设定如下
      <context-param> 
         <param-name>log4jConfigLocation</param-name> 
         <param-value>WEB-INF/log4j.properties</param-value> 
      </context-param> 
      <context-param> 
         <param-name>log4jRefreshInterval</param-name> 
         <param-value>60000</param-value> 
      </context-param> 
      <!-- 需要添加spring-web.jar包,否则用发生错误信息 -->
      <listener> 
         <listener-class>org.spring work.web.util.Log4jConfigListener</listener-class> 
      </listener> 
     
     Maven依赖:
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.12</version>
      </dependency>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
      </dependency>    
收藏 打印