log4j配置文件详解---转

使用步骤注意:html

1. 从http://logging.apache.org/log4j/1.2/ 下载文件java

2. 在src目录下加入log4j.properties,将jar包放入build -path,log4j.properties 编译后位于/classes目录下。apache

3.  配置文件读取解析:编程

     PropertyConfigurator.configure(String configFilename)---->服务器

PropertyConfigurator.javaapp

  staticpublic void configure(String configFilename) {
    new PropertyConfigurator().doConfigure(configFilename,
                       LogManager.getLoggerRepository());
  }

--->读取配置文件socket

 public
  void doConfigure(String configFileName, LoggerRepository hierarchy) {
    Properties props = new Properties();
    FileInputStream istream = null;
    try {
      istream = new FileInputStream(configFileName);
      props.load(istream);
      istream.close();
    }
    catch (Exception e) {
      if (e instanceof InterruptedIOException || e instanceof InterruptedException) {
          Thread.currentThread().interrupt();
      }
      LogLog.error("Could not read configuration file ["+configFileName+"].", e);
      LogLog.error("Ignoring configuration file [" + configFileName+"].");
      return;
    } finally {
        if(istream != null) {
            try {
                istream.close();
            } catch(InterruptedIOException ignore) {
                Thread.currentThread().interrupt();
            } catch(Throwable ignore) {
            }

        }
    }
    // If we reach here, then the config file is alright.
    doConfigure(props, hierarchy);
  }

-->读取配置函数

  /**
     Read configuration options from <code>properties</code>.

     See {@link #doConfigure(String, LoggerRepository)} for the expected format.
  */
  public
  void doConfigure(Properties properties, LoggerRepository hierarchy) {
    repository = hierarchy;
    String value = properties.getProperty(LogLog.DEBUG_KEY);
    if(value == null) {
      value = properties.getProperty("log4j.configDebug");
      if(value != null) {
        LogLog.warn("[log4j.configDebug] is deprecated. Use [log4j.debug] instead.");
    }
    }

    if(value != null) {
      LogLog.setInternalDebugging(OptionConverter.toBoolean(value, true));
    }

      //
      //   if log4j.reset=true then
      //        reset hierarchy
    String reset = properties.getProperty(RESET_KEY);
    if (reset != null && OptionConverter.toBoolean(reset, false)) {
          hierarchy.resetConfiguration();
    }

    String thresholdStr = OptionConverter.findAndSubst(THRESHOLD_PREFIX,
                               properties);
    if(thresholdStr != null) {
      hierarchy.setThreshold(OptionConverter.toLevel(thresholdStr,
                             Level.ALL));
      LogLog.debug("Hierarchy threshold set to ["+hierarchy.getThreshold()+"].");
    }
    
    configureRootCategory(properties, hierarchy);
    configureLoggerFactory(properties);
    parseCatsAndRenderers(properties, hierarchy);

    LogLog.debug("Finished configuring.");
    // We don't want to hold references to appenders preventing their
    // garbage collection.
    registry.clear();
  }

 

原文:http://zengjinliang.iteye.com/blog/171550布局

一:log4j配置文件基本含义说明 ui

log4j.properties配置文件讲解以下: # Set root logger level to DEBUG and its only appender to A1 #log4j中有五级logger #FATAL 0 #ERROR 3 #WARN 4 #INFO 6 #DEBUG 7 配置根Logger,其语法为: #log4j.rootLogger = [ level ] , appenderName, appenderName, … log4j.rootLogger=INFO, A1 ,R #这一句设置觉得着全部的log都输出 #若是为log4j.rootLogger=WARN, 则意味着只有WARN,ERROR,FATAL #被输出,DEBUG,INFO将被屏蔽掉. # A1 is set to be a ConsoleAppender. #log4j中Appender有几层如控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等 #ConsoleAppender输出到控制台 log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 使用的输出布局,其中log4j提供4种布局. org.apache.log4j.HTMLLayout(以HTML表格形式布局) #org.apache.log4j.PatternLayout(能够灵活地指定布局模式), #org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), #org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) log4j.appender.A1.layout=org.apache.log4j.PatternLayout #灵活定义输出格式 具体查看log4j javadoc org.apache.log4j.PatternLayout #d 时间 .... log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n #R 输出到文件 RollingFileAppender的扩展,能够提供一种日志的备份功能。 log4j.appender.R=org.apache.log4j.RollingFileAppender #日志文件的名称 log4j.appender.R.File=log4j.log #日志文件的大小 log4j.appender.R.MaxFileSize=100KB # 保存一个备份文件 log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.TTCCLayout #log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n 配置根Logger,其语法为: log4j.rootLogger = [ level ] , appenderName, appenderName, ... level 是日志记录的优先级 appenderName就是指定日志信息输出到哪一个地方。您能够同时指定多个输出目的地。 配置日志信息输出目的地Appender,其语法为 log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 ... log4j.appender.appenderName.option = valueN 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.appender.appenderName.layout.option1 = value1 .... log4j.appender.appenderName.layout.option = valueN Log4j提供的layout有如下几种: org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(能够灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) -------------------------------------------------------------------------------- 2、Log4j日志管理系统简单使用说明 ----------------------------- 摘自:http://x.discuz.net/131976/viewspace_42754.html Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件能够轻松的记录信息的类型和级别,并能够在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明: 一、 Loggers     Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,若是在Loggers中发生了一个级别Q比P高,则能够启动,不然屏蔽掉。 Java程序举例来讲: //创建Logger的一个实例,命名为“com.foo” Logger  logger = Logger.getLogger("com.foo"); //设置logger的级别。一般不在程序中设置logger的级别。通常在配置文件中设置。 logger.setLevel(Level.INFO); Logger barlogger = Logger.getLogger("com.foo.Bar"); //下面这个请求可用,由于WARN >= INFO logger.warn("Low fuel level."); //下面这个请求不可用,由于DEBUG < INFO logger.debug("Starting search for nearest gas station."); //命名为“com.foo.bar”的实例barlogger会继承实例“com.foo”的级别。所以,下面这个请求可用,由于INFO >= INFO barlogger.info("Located nearest gas station."); //下面这个请求不可用,由于DEBUG < INFO barlogger.debug("Exiting gas station search"); 这里“是否可用”的意思是可否输出Logger信息。     在对Logger实例进行命名时,没有限制,能够取任意本身感兴趣的名字。通常状况下建议以类的所在位置来命名Logger实例,这是目前来说比较有效的Logger命名方式。这样可使得每一个类创建本身的日志信息,便于管理。好比: static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName()); 二、 Appenders     禁用与使用日志请求只是Log4j其中的一个小小的地方,Log4j日志系统容许把日志输出到不一样的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。 其语法表示为: org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) 配置时使用方式为: log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.option = valueN 这样就为日志的输出提供了至关大的便利。 三、 Layouts     有时用户但愿根据本身的喜爱格式化本身的日志输出。Log4j能够在Appenders的后面附加Layouts来完成这个功能。Layouts提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。 其语法表示为: org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(能够灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) 配置时使用方式为:      log4j.appender.appenderName.layout =       fully.qualified.name.of.layout.class      log4j.appender.appenderName.layout.option1 = value1      …      log4j.appender.appenderName.layout.option = valueN     以上是从原理方面说明Log4j的使用方法,在具体Java编程使用Log4j能够参照如下示例: 一、 创建Logger实例:     语法表示:public static Logger getLogger( String name)     实际使用:static Logger logger = Logger.getLogger   (ServerWithLog4j.class.getName ()) ; 二、 读取配置文件:     得到了Logger的实例以后,接下来将配置Log4j使用环境:     语法表示:     BasicConfigurator.configure():自动快速地使用缺省Log4j环境。     PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。     DOMConfigurator.configure(String filename):读取XML形式的配置文件。     实际使用:PropertyConfigurator.configure("ServerWithLog4j.properties"); 三、 插入日志信息     完成了以上连个步骤之后,下面就能够按日志的不一样级别插入到你要记录日志的任何地方了。     语法表示:     Logger.debug(Object message);     Logger.info(Object message);     Logger.warn(Object message);     Logger.error(Object message);     实际使用:logger.info("ServerSocket before accept: " + server);     在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用,具体以下: 一、 配置根Logger,其语法为:     log4j.rootLogger = [ level ] , appenderName, appenderName, … 这里level指Logger的优先级,appenderName是日志信息的输出地,能够同时指定多个输出地。如:log4j.rootLogger= INFO,A1,A2 二、 配置日志信息输出目的地,其语法为:     log4j.appender.appenderName = fully.qualified.name.of.appender.class     能够指定上面所述五个目的地中的一个。 三、 配置日志信息的格式,其语法为:     log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class     这里上面三个步骤是对前面Log4j组件说明的一个简化;下面给出一个具体配置例子,在程序中能够参照执行:     log4j.rootLogger=INFO,A1     log4j.appender.A1=org.apache.log4j.ConsoleAppender     log4j.appender.A1.layout=org.apache.log4j.PatternLayout     log4j.appender.A1.layout.ConversionPattern=                                         %-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n     这里须要说明的就是日志信息格式中几个符号所表明的含义:     -X号: X信息输出时左对齐;     %p: 日志信息级别     %d{}: 日志信息产生时间     %c: 日志信息所在地(类名)     %m: 产生的日志具体信息     %n: 输出日志信息换行 根据上面的日志格式,某一个程序的输出结果以下: 0    INFO  2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014] 16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003' 16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD 16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.' 16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP 16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT' 16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT -------------------------------------------------------------------------------- 3、配置Log4j 摘自:http://x.discuz.net/131976/viewspace_42752.html Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。经过配置,能够建立出Log4J的运行环境。 1. 配置文件 Log4J配置文件的基本格式以下: #配置根Logger log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  … #配置日志信息输出目的地Appender log4j.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] 是日志输出级别,共有5级: FATAL      0  ERROR      3  WARN       4  INFO       6  DEBUG      7 Appender 为日志输出目的地,Log4j提供的appender有如下几种: org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件), org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) Layout:日志输出格式,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平台为“\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 )  2. 在代码中初始化Logger: 1)在程序中调用BasicConfigurator.configure()方法:给根记录器增长一个ConsoleAppender,输出格式经过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG. 2)配置放在文件里,经过命令行参数传递文件名字,经过PropertyConfigurator.configure(args[x])解析并配置; 3)配置放在文件里,经过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置; 4)配置放在文件里,经过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。 3. 为不一样的 Appender 设置日志输出级别: 当调试系统时,咱们每每注意的只是异常级别的日志输出,可是一般全部级别的输出都是放在一个文件里的,若是日志输出的级别是BUG!?那就慢慢去找吧。 这时咱们也许会想要是能把异常信息单独输出到一个文件里该多好啊。固然能够,Log4j已经提供了这样的功能,咱们只须要在配置中修改Appender的Threshold 就能实现,好比下面的例子: [配置文件] ### 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.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = logs/error.log ## 异常日志文件名 log4j.appender.D.Append = true log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!! 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 [代码中使用]   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 " );     } } 运行一下,看看异常信息是否是保存在了一个单独的文件error.log中。

相关文章
相关标签/搜索