Apache Log4j 学习笔记

本文深入解析了Log4j中的核心组件及其作用,包括Logger、Appender、Layout等,详细介绍了如何配置和使用这些组件来实现高效、灵活的日志记录。通过具体的示例,展示了如何设置不同类型的Appender(如ConsoleAppender、FileAppender、RollingFileAppender)和布局(如PatternLayout),以及如何利用additivity标志来控制日志输出的行为。

Log4j的类图

  • Logger - 日志写出器,供程序员输出日志信息
  • Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去
    • ConsoleAppender - 目的地为控制台的Appender
    • FileAppender - 目的地为文件的Appender
    • RollingFileAppender - 目的地为大小受限的文件的Appender
  • Layout - 日志格式化器,用来把程序员的logging request格式化成字符串
    • PatternLayout - 用指定的pattern格式化logging request的Layout

      Appender:日志目的地

      每个logger都可以拥有一个或者多个appender,每个appender表示一个日志的输出目的地,比如console或者某个文件。可以使用Logger.addAppender(Appender app)为logger增加一个appender;可以使用Logger.removeAppender(Appender app)为logger移除一个appender。

      默认情况下,logger的additive标志被设置为true,表示子logger将继承父logger的所有appenders。该选项可以被重新设置,表示子logger将不再继承父logger的appenders。

      root logger拥有目标为system.out的consoleAppender,故默认情况下,所有的logger都将继承该appender。

      // Log4j APIs : class Logger
            
      // 为logger对象增加或者移除一个Appender对象
      public void appAppender(Appender app);
      public void removeAppender(Appender app);
      
      // 获得和设置additive标志:是否继承父logger的appenders
      // 注意:在设置additive标志为false时,必须保证已经为该logger设置了新的appender,
      // 否则log4j将报错:log4j:WARN No appenders could be found for logger (x.y.z).
      public boolean getAdditivity();
      public void setAdditivity(boolean additive);
              

      ConsoleAppender

      可以使用ConsoleAppender对象把日志输出到控制台。每个ConsoleAppender都有一个target,表示它的输出目的地。它可以是System.out,标准输出设备(缓冲显示屏);或者是System.err,标准错误设备(不缓冲显示屏)。ConsoleAppender的使用方法参考如下API:

      // Log4j APIs : class ConsoleAppender extends WriterAppender
            
      // 构造方法,使用一个Layout对象构造一个ConsoleAppender对象 
      // 默认情况下,ConsoleAppender的target是System.out 
      public ConsoleAppender(Layout layout);
      
      // 构造方法,使用一个Layout对象和一个target字符串构造ConsoleAppender对象 
      // target的可能取值为ConsoleAppender.SYSTEM_OUT和ConsoleAppender.SYSTEM_ERR 
      public ConsoleAppender(Layout layout, String target);
                

      FileAppender

      可以使用FileAppender对象把日志输出到一个指定的日志文件中去。使用方法可以参考如下的API:

      // Log4j APIs : class FileAppender extends WriterAppender
            
      // 构造方法,使用一个Layout对象和日志文件名构造一个FileAppender对象 
      public FileAppender(Layout layout, String filename)
      throws IOException;
      public FileAppender(Layout layout, String filename, boolean append)
      throws IOException;
                

      RollingFileAppender

      可以使用FileAppender的子类RollingFileAppender对象,把日志输出到一个指定的日志文件中。不同的是该日志文件的大小受到限制,当日志内容超出最大的尺寸时,该文件将向上滚动(最老的日志被擦除)。还可以在该类对象中指定为日志文件做多少个备份。具体使用方法参考如下API:

      // Log4j APIs : class RollingFileAppender extends FileAppender
            
      // 构造方法,使用一个Layout对象和日志文件名构造一个RollingFileAppender对象 
      public RollingFileAppender(Layout layout, String filename)
      throws IOException;
      public RollingFileAppender(Layout layout, String filename, boolean append)
      throws IOException;
      
      // 获得和设置日志备份文件的个数 
      public int getMaxBackupIndex();
      public void setMaxBackupIndex(int index);
      
      // 获得和设置滚动日志文件的最大尺寸 
      public long getMaximumFileSize();
      public void setMaximumFileSize(long size);
                

      Layout:日志格式化器

      每个appender都和一个layout相联系;layout的任务是格式化用户的logging request,appender的任务是把layout格式化好的输出内容送往指定的目的地。

      PatternLayout

      PatternLayout是Layout的一个子类,用来使用类似C语言的printf函数中使用的格式控制字符串来控制日志的输出格式。使用方法参考如下API:

      // Log4j APIs : class PatternLayout extends Layout
            
      // 无参数构造方法,使用DEFAULT_CONVERSION_PATTERN构造一个PatternLayout 
      // 注意:DEFAULT_CONVERSION_PATTERN为"%m%n",只打印消息信息 
      public PatternLayout();
      
      // 构造方法,使用自定义的pattern构造一个PatternLayout 
      public PatternLayout(String pattern);
      
      // 获得和设置PatternLayout对象的日志pattern 
      public String getConversionPattern();
      public void setConversionPattern(String pattern);
      
      
      
      
      示例:
      log4j.rootLogger=all, 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
      
      
      log4j.appender.R=org.apache.log4j.RollingFileAppender
      log4j.appender.R.File= E:/test.log
      
      
      log4j.appender.R.MaxFileSize=100KB
      # Keep one backup file
      log4j.appender.R.MaxBackupIndex=20
      
      
      log4j.appender.R.layout=org.apache.log4j.PatternLayout
      log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
      
      
      
      示例2:(指定包的log输出)
      log4j.logger.com.ebank.kunlun=ALL,KUNLUNLog
      #log4j.additivity.com.ebank.kunlun=false
      log4j.appender.KUNLUNLog=org.apache.log4j.RollingFileAppender
      log4j.appender.KUNLUNLog.File=/cpf/SUNWappserver/domains/domain3/logs/KUNLUN/KUNLUN_test.log
      log4j.appender.KUNLUNLog.MaxFileSize=2048KB
      log4j.appender.KUNLUNLog.MaxBackupIndex=100
      log4j.appender.KUNLUNLog.layout=org.apache.log4j.PatternLayout
      log4j.appender.KUNLUNLog.layout.ConversionPattern=%n[%d{dd-MM-yyyy HH\:mm\:ss}][%t][%p] (%c\:%L) - %m%n 
      
      
      
      
      
      
      
      
      
      
      
      参考:http://heavyz.sourceforge.net/homepage/homepage_zh/comp/notes/log4j.html
            http://www.gbsou.com/2010/04/13/2450.html
      
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值