`
adm889486
  • 浏览: 37451 次
  • 性别: Icon_minigender_1
  • 来自: 绵阳
社区版块
存档分类
最新评论

Log4J使用完全手册

阅读更多
Log4J是Apache的一个开放源代码项目(http://logging.apache.org/log4j/docs/),它是一个日志操作包。通过使用Log4J,可以指定日志信息输出的目的地,控制每一条日志的输出格式,定义日志信息的级别。所有这些功能通过一个配置文件灵活进行配置。 ­

一、LOG4J组成­

  LOG4J主要由三大组件组成:­

  . Logger: 决定什么日志信息应该被输出、什么日志信息应该被忽略;­

  . Appender: 指定日志信息应该输出到什么地方, 这些地方可以是控制台、文件、网络设备;­

  . Layout: 指定日志信息的输出格式;­

  一个Logger可以有多个Appender,也就是说日志信息可以同时输出到多个设备上,每个Appender对应­

  一种Layout(示例见下图)。­

        ↗ Appender1 → Layout­

  /   ­

  Logger­

  ﹨ ­

        ↘ Appender2 → Layout­

­

二、Logger组件­

  1. Logger组件提供的方法:­

    Logger组件是LOG4J的核心组件,它代表了Log4J的日志记录器,它能够对日志信息进行分类筛选。它由org.apache.log4j.Logger类实现,提供了如下方法:­

­

java 代码­

package org.apache.log4j;   ­

  ­

public class Logger {   ­

  ­

      // Creation & retrieval methods:   ­

      public static Logger getRootLogger();   ­

      public static Logger getLogger(String name);   ­

  ­

      // printing methods:   ­

      public void debug(Object message);   ­

      public void info(Object message);   ­

      public void warn(Object message);   ­

      public void error(Object message);   ­

      public void fatal(Object message);   ­

    ­

      // generic printing method:   ­

      public void log(Priority p, Object message);   ­

}   ­

  2. 在配置文件中配置Logger组件­

    可在Log4J配置文件中配置自己的Logger组件,示例:­

    log4j.logger.myLogger=WARN­

    以上代码定义了一个Logger组件,名称为myLogger,日志级别为WARN。­

­

  3. 日志级别种类:­

    一共有五种,级别由高到低依次是:fatal、error、warn、info、debug。获得Logger实例后,我们可调用以下方法之一输出日志信息:­

    public void debug(Object message);       //输出debug级别的日志信息;­

    public void info(Object message);       //输出info级别的日志信息;­

    public void warn(Object message);       //输出warn级别的日志信息;­

    public void error(Object message);       //输出error级别的日志信息;­

    public void fatal(Object message);       //输出fatal级别的日志信息;­

    public void log(Priority p, Object message);//输出参数Priority指定级别的日志信息;­

    以上方法只有当它的级别大于或等于Logger组件配置的日志级别时才调用。以前面我们配置的myLogger为例,它的日志级别为WARN, 那么在程序中,它的warn()、error()、fatal()方法会被执行。对于log()方法,只有当它的参数Priority指定的日志级别大于或等于WARN时,它才会被执行。­

  4. 为什么需要对日志进行分级?­

  ­

    在写程序的时候,为了调试程序,我们会在很多出错的地方输出大量的日志信息。当程序调试完,不需要这些信息时,将程序中这些输出日志信息代码删除吗?这样费时费力,对于大型程序几乎不可行。通过对日志分级,假如不想输出WARN级别的日志信息,则Logger组件的级别调高即可,省时省心。­

  5. Logger组件的继承性­

    Log4J提供了一个root Logger,它是所有Logger组件的“祖先”,它永远存在,且不能通过名字检索或引用,通过Logger.getRootLogger()方法取得它。配置root Logger代码:­

    log4j.rootLogger=INFO,console­

    可在配置文件中方便地配置存在继承关系的Logger组件,凡是在符号“.”后面的组件都会成为在符号“.”前面的Logger组件的子类。例如:­

    log4j.apache.myLogger=WARN­

    log4j.apache.myLogger.mySonLogger=,file­

    以上代码中, mySonLogger是myLogger的子类Logger组件。Logger组件的继承关系:­

    . 如果子类Logger组件没有定义日志级别,则将继承父类的日志级别;­

    . 如果子类Logger组件定义了日志级别,就不会继承父类的日志级别;­

    . 黙认情况下,子类Logger组件会继承父类所有的Appender,把它们加入到自己的Appener;­

    . 如果把子类Logger组件的additivity标志设为false,那么它就不会继承父类Appender。additivity标志 默认值为false;­

    以上配置的三个Logger继承关系示例如图:­

  ­

    root Logger: 日志级别=INFO appender清单=console­

                  ↑­

    myLogger: 日志级别=WARN appender清单=null­

                  ↑­

    mySonLogger: 日志级别=null appender清单=file ­

    这三个Logger组件实际日志级别和Appender如下表:­

    Logger组件       日志级别       Appender清单­

    root Logger       INFO         console­

    myLogger         WARN         console(继承)­

    mySonLogger       WARN(继承)     file,console(继承)­

    ­

三、Appender组件­

  Appender组件决定将日志信息输出到什么地方。支持以下目的地:­

  . 控制台(Console);­

  . 文件(File);­

  . GUI组件(GUI component);­

  . 套接口服务器(Remote socket server);­

  . NT的事件记录器(NT Event Logger);­

  . UNIX Syslog守护进程(Remote UNIX Syslog daemon);­

  一个Logger可同时对应多个Appender,示例:myLogger配置二个Appender: 一个file, 一个是console:­

  log4j.logger.myAppender=WARN,file,console­

  log4j.appender.file=org.apache.log4j.RollingFileAppender­

  log4j.appender.file.File=log.txt­

  log4j.apender.console=org.apache.log4j.ConsoleAppender­

四、Layout组件­

  Layout组件决定日志输出格式,有以下几种类型:­

  . org.apache.log4j.HTMLLayout(以HTML表格形式布局);­

  . org.apache.log4j.PatternLayout(可以灵活地指定布局模式);­

  . org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串);­

  . org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息);­

  ­

  为名称为console的Appender配置SimpleLayout,代码如下:­

  log4j.appender.console.layout=org.apache.log4j.SimpleLayout­

  输出日志格式如下:­

  WARN - This is a log message from the myLogger­

  ­

  为名称为file的Appender配置PatternLayout,代码如下:­

  log4j.appender.file.layout=org.apache.log4j.PatternLayout­

  log4j.appender.file.layout.ConversionPattern=%t %p - %m%n­

  输出日志格式如下:­

  THREAD-1 WARN - This is a log message from the myLogger­

  PatternLayout让开发者依照ConversionPattern定义输出格式。ConversionPattern中一些指定日志内容和格式的预定义符号说明如下:­

  符号       描述­

  %r       自程序开始后消耗的毫秒数­

  %t       表示日志记录请求生成的线程­

  %p       表示日专语句的优先级­

  %r       与日志请求相关的类别名称­

  %c       日志信息所在的类名­

  %m%n       表示日志信息的内容­

五、Log4J的基本用法­

  1. 定义配置文件­

    Log4J支持二种配置文件格式:XML和Java属性文件(采用“键=值”形式)。以下为Java属性文件­

    格式配置文件:­

    ­

    . 配置Logger组件­

      ­

      配置root Logger语法为:log4j.rootLogger=[priority],appenderName,appenderName,...­

      配置自定义Logger组件语法为:log4j.logger.loggerName=[priority],appenderName,appenderName,...­

      其中:priority为日志级别,可选值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL;­

          appenderName指定Appender组件,可指定多个;       ­

    . 配置Appender组件­

      配置日志信息输出目的地Appender, 语法为:­

      log4j.appender.appenderName=fully.ualified.name.of.appender.class­

      log4j.appender.appenderName.option1=value1­

      ...­

      log4j.appender.appenderName.optionN=valueN­

      Log4J提供的Appender有以下几种:­

      a. org.apache.log4j.ConsoleAppender(控制台);­

      b. org.apache.log4j.FileAppender(文件);­

      c. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件);­

      d. org.apache.log4j.RollingFileAppender(文件大小到指定尺寸产生一个新的文件);­

      e. org.apache.log4j.WriteAppender(将日志信息以流格式发送到任意指定地方);­

    . 配置Layout组件­

      配置Layout组件语法为:­

      log4j.appender.appenderName.layout=fully.ualified.name.of.appender.class­

      log4j.appender.appenderName.layout.option1=value1­

      ...­

      log4j.appender.appenderName.layout.optionN=valueN­

      下面为一配置文件示例,文件名为log4j.properties:­

      ## LOGGERS ##­

      #configure root logger­

      log4j.rootLogger=INFO,console­

      #define a logger named myLogger­

      log4j.logger.myLogger=WARN­

      #define a second logger that is a child to myLogger­

      log4j.logger.myLogger.mySonLogger=,file­

      ## APPENDERS ##­

      #define an appender named console, which is set to be a ConsoleAppender­

      log4j.appender.console=org.apache.log4j.ConsoleAppender­

      # define an appender named file, which is set to be a RollingFileAppender­

      log4j.appender.file=org.apache.log4j.FileAppender­

      log4j.appender.file.File=log.txt­

      ## LAYOUTS ##­

      # assian a SimpleLayout to console appender­

      log4j.appender.console.layout=org.apache.log4j.SimpleLayout­

      # assian a PatternLayout to file appender­

      log4j.appender.file.layout=org.apache.log4j.PatternLayout­

      log4j.appender.file.layout.ConversionPattern=%t%p-%m%n­

      ­

  2. 程序中使用Log4j­

    . 获得日志记录器:­

      获得rootLogger:Logger rootLogger=Logger.getRootLogger();­

      获得自定义Logger:Logger myLogger = Logger.getLogger("log4j.logger.myLogger");­

    . 读取日志记录器,配置Log4J环境;­

      a. BasicConfigurator.configure(): 自动快速地使用默认Log4J环境;­

      b. Property.configurator.configure(String configFilename): 读取使用Java属性格式的配置文件并配置Log4J环境;­

      c. DOMConfigurator.configure(String filename): 读取XML形式的配置文件并配置LOG4J环境;­

    . 输出日志信息;­

      在程序代码中需要生成日志的地方,调用Logger的各种输出日志方法输出不同级别的日志,例如:­

      ­

      myLogger.debug("Thie is a log message from the " + myLogger.getName());­

      下面为一使用Log4J的程序,程序名为Test.java:­

java 代码­

import org.apache.log4j.Logger;   ­

import org.apache.log4j.PropertyConfigurator;   ­

  ­

public class Test {   ­

  ­

  public static void main(String[] args) {   ­

  //Get an instance of the myLogger   ­

  Logger myLogger = Logger.getLogger("myLogger");   ­

    ­

  //Get an instance of the childLogger   ­

  Logger mySonLogger = Logger.getLogger("myLogger.mySonLogger");   ­

  //Load the proerties using the PropertyConfigurator   ­

  PropertyConfigurator.configure("log4j.properties");   ­

  ­

  //Log Messages using the Parent Logger   ­

  myLogger.debug("Thie is a log message from the " + myLogger.getName());   ­

  myLogger.info("Thie is a log message from the " + myLogger.getName());   ­

  myLogger.warn("Thie is a log message from the " + myLogger.getName());   ­

  myLogger.error("Thie is a log message from the " + myLogger.getName());   ­

  myLogger.fatal("Thie is a log message from the " + myLogger.getName());   ­

  ­

  mySonLogger.debug("Thie is a log message from the " + mySonLogger.getName());   ­

  mySonLogger.info("Thie is a log message from the " + mySonLogger.getName());   ­

  mySonLogger.warn("Thie is a log message from the " + mySonLogger.getName());   ­

  mySonLogger.error("Thie is a log message from the " + mySonLogger.getName());   ­

  mySonLogger.fatal("Thie is a log message from the " + mySonLogger.getName());   ­

  }   ­

}   ­

    程序运行结果为:­

    WARN - Thie is a log message from the myLogger­

    ERROR - Thie is a log message from the myLogger­

    FATAL - Thie is a log message from the myLogger­

    WARN - Thie is a log message from the myLogger.mySonLogger­

    ERROR - Thie is a log message from the myLogger.mySonLogger­

    FATAL - Thie is a log message from the myLogger.mySonLogger­

    另在Test.class所在的目录下看到一个log.txt文件,内容如下:­

    WARN - Thie is a log message from the myLogger.mySonLogger­

    ERROR - Thie is a log message from the myLogger.mySonLogger­

    FATAL - Thie is a log message from the myLogger.mySonLogger­

    如将配置文件log4j.properties中语句­

log4j.logger.myLogger.mySonLogger=,file­

改为­

log4j.logger.myLogger.mySonLogger=,file,console­

再次运行程序,结果如下:­

    WARN - Thie is a log message from the myLogger­

    ERROR - Thie is a log message from the myLogger­

    FATAL - Thie is a log message from the myLogger­

    WARN - Thie is a log message from the myLogger.mySonLogger­

    WARN - Thie is a log message from the myLogger.mySonLogger­

    ERROR - Thie is a log message from the myLogger.mySonLogger­

    ERROR - Thie is a log message from the myLogger.mySonLogger­

    FATAL - Thie is a log message from the myLogger.mySonLogger       ­

    FATAL - Thie is a log message from the myLogger.mySonLogger­

    mySonLogger的日志在控制台上输出了二次,这是因为mySonLogger继承了父类console Appender,­

    本身又定义了一个console Appender, 因而有二个console Appender。­

六、在web应用中使用Log4J­

  创建一个Servlet,在它初始化方法中读取Log4J配置文件并配置Log4J环境,这个Servlet在Web应用启­

  动时候被加载和初始化,然后就可在其它Web组件中获取Logger对象并输出日志。­

  1. 创建用于配置Log4J环境的Servlet­

java 代码­

import javax.servlet.*;   ­

import javax.servlet.http.*;   ­

import java.io.*;   ­

import java.util.*;   ­

  ­

import org.apache.log4j.PropertyConfigurator;   ­

  ­

public class Log4JServlet extends HttpServlet {   ­

    public void init() throws ServletException {   ­

      String path = getServletContext().getRealPath("/");   ­

      //getInitParameter("propfile")方法从web.xml文件中读取Log4J配置文件的名字"profile"。   ­

      String propfile = path + getInitParameter("propfile");   ­

      PropertyConfigurator.configure(propfile);   ­

    }   ­

}   ­

  ­

    该Servlet在web.xml中的配置如下:­

­

xml 代码­

<servlet>   ­

<servlet-name>log4jServlet</servlet-name>   ­

<servlet-class>Log4JServlet</servlet-class>   ­

<init-param>   ­

  <param-name>propfile</param-name>   ­

  <param-value>/WEB-INF/log4j.properties</param-value>   ­

</init-param>   ­

<load-on-startup>1</load-on-startup>   ­

</servlet>   ­

2. 在login.jsp中输出日志­

    <[url=mailto:%@page]%@page import="org.apache.log4j.Logger"%>­

    <html>­

      <head>­

      <title>login</title>­

      </head>­

      <body>­

      <%­

        Logger myLogger = Logger.getLogger("myLogger");­

        Logger mySonLogger = Logger.getLogger("myLogger.mySonLogger");­

        myLogger.debug("Thie is a log message from the " + myLogger.getName());­

        myLogger.info("Thie is a log message from the " + myLogger.getName());­

        myLogger.warn("Thie is a log message from the " + myLogger.getName());­

        myLogger.error("Thie is a log message from the " + myLogger.getName());­

        myLogger.fatal("Thie is a log message from the " + myLogger.getName());­

        mySonLogger.debug("Thie is a log message from the " + mySonLogger.getName());­

        mySonLogger.info("Thie is a log message from the " + mySonLogger.getName());­

        mySonLogger.warn("Thie is a log message from the " + mySonLogger.getName());­

        mySonLogger.error("Thie is a log message from the " + mySonLogger.getName());­

        mySonLogger.fatal("Thie is a log message from the " + mySonLogger.getName());­

      %>­

      <br>­

        <form name="loginForm" method="post" action="dispatcher">­

        username: <input type="text" name="username">­

        <br>­

        password: <input type="text" name="password">­

        <br>­

        <input type="submit" name="submit" value="submit">­

      </form>­

      </body>­

    </html>­

          ­

  3. 发布运行使用Log4J的web应用­

    1) 将Log4J的JAR文件拷贝至目录:<WEB应用所在目录>/WEB-INF/lib­

    2) 创建Log4J的配置文件log4j.properties, 存放目录为:<WEB应用所在目录>/WEB-INF。内容同前面配置文件示例。­

    3) 编译Log4JServlet, 存放至目录: <WEB应用所在目录>/WEB-INF/classes­

    4) 修改web.xml文件,加入以下内容:­

­

xml 代码­

<servlet>   ­

<servlet-name>log4jServlet</servlet-name>   ­

<servlet-class>Log4JServlet</servlet-class>   ­

<init-param>   ­

  <param-name>profile</param-name>   ­

  <param-value>/WEB-INF/log4j.properties</param-value>   ­

</init-param>   ­

<load-on-startup>1</load-on-startup>   ­

</servlet>   ­

    5) 启动服务器,访问login.jsp页面,在服务器控制台上看到如下日志:­

      WARN - Thie is a log message from the myLogger­

      ERROR - Thie is a log message from the myLogger­

      FATAL - Thie is a log message from the myLogger­

      WARN - Thie is a log message from the myLogger.mySonLogger­

      ERROR - Thie is a log message from the myLogger.mySonLogger­

      FATAL - Thie is a log message from the myLogger.mySonLogger­

      另在<WEB应用所在目录>/WEB-INF目录下看到一个log.txt文件,内容如下:­

      WARN - Thie is a log message from the myLogger.mySonLogger­

      ERROR - Thie is a log message from the myLogger.mySonLogger­

      FATAL - Thie is a log message from the myLogger.mySonLogger­
分享到:
评论

相关推荐

    log4j使用完全手册.rar

    log4j使用完全手册 很好啊!也很强!在做JAVA EE项目项目中日志是必须写的!所以LOG4J是我们最佳的选择!

    log4j使用完全手册

    收录log4j一般使用方法,具有很高参考价值

    Log4J完全使用手册

    Log4J使用手册,包括日常用到的Log4J使用方法。

    【转】log4j使用完全手册

    log4j.properties 博文链接:https://aindf0128.iteye.com/blog/785582

    log4j完全参考手册

    log4j概况介绍 log4j的架构概览 log4j的配置 log4j应用实例

    Log4j完全手册WORD版

    以log4j complete manual的pdf版本为模板转换的word文档,格式基本相同,没有太大的出入。此版本主要方便大家用软件取词。

    log4j完全手册

    配置内容涵盖面广,参数讲解详细。

    The Complete log4j Manual

    学习log4j的完全手册

    书本源码--JavaWeb 实战开发完全学习手册

    Java Web实战开发完全学习手册》共分15章,全面系统地介绍了JavaWeb相关的知识,主要包括JavaWeb开发基础、HTML与CSS网页开发基础、JavaScript基础、JSP基本语法、JSP隐式对象、JDBC技术应用、Servlet技术应用、...

    java学习阶段所有的API帮助文档

    JspSmartUpload,JSP基础语法帮助,JUnit4.1_帮助文档,log4j 1.2.14,Microsoft Jet SQL参考,MySQL 5.1参考手册,MySQL使用,PostgreSQL 8.0.0 中文文档,Servlet2.3-帮助文档,Spring Security安全权限管理手册,...

    微软活动目录管理管理简明手册

    有关DNS服务器的配置,读者可以参考《电脑报2001年合订本》下册附录中《ⅡS 5.0网络建站完全手册》一文。 4 ^; U6 a4 c4 _+ F. @& i* y2 M 9 X, c" R4 J. `7 w: z(二)安装活动目录 3 |" ]' a: f6 V# D$ W运行活动...

    计算机应用技术(实用手册)

    4.格式之间的转换,使用winavi进行转换 32 5.常用的快捷键,使用快捷可以帮助我节约时间。 33 6.开机常按F8可以进入安全模式或是带DOS命令的安全模式。 33 第六章GHOST的备份与恢复 34 第七章 综合应用 44 一....

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    避免重复打印日志,浪费磁盘空间,务必在log4j.xml中设置additivity=false。 D .错误日志和业务日志尽量分开存放。 多选 16.关于代码注释,下列哪些说法符合《阿里巴巴Java开发手册》:ABD A .特殊注释标记,请...

    计算机二级公共基础知识

    性质4:具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分。 3. 满二叉树与完全二叉树 满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有结点都有两个子结点。在满二叉树中...

Global site tag (gtag.js) - Google Analytics