zoukankan      html  css  js  c++  java
  • 使用Commons Logging

    Commons Logging

    和Java标准库提供的日志不同,Commons Logging是一个第三方日志库,它是由Apache创建的日志模块,需要导入commons-logging-1.2.jar

    Commons Logging的特色是,它可以挂接不同的日志系统,并通过配置文件指定挂接的日志系统。默认情况下,Commons Logging自动搜索并使用Log4jLog4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging

    使用Commons Logging只需要和两个类打交道,并且只有两步:

    1. 先通过LogFactory获取Log类的实例;
    2. 然后使用Log实例的方法打日志。
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    public class Main {
        public static void main(String[] args) {
            Log log = LogFactory.getLog(Main.class);
            log.info("start...");
            log.warn("end.");
        }
    }

    运行结果如下:

    八月 07, 2019 9:58:08 上午 Main main
    信息: start...
    八月 07, 2019 9:58:08 上午 Main main
    警告: end.

    Commons Logging定义了6个日志级别:

    • FATAL
    • ERROR
    • WARNING
    • INFO
    • DEBUG
    • TRACE

    默认级别是INFO

    1)在静态方法中引用Log

    使用Commons Logging时,如果在静态方法中引用Log,通常直接定义 大专栏  使用Commons Logging一个静态类型变量:

    public class Main {
        static final Log log = LogFactory.getLog(Main.class);
    
        static void foo() {
            log.info("foo");
        }
    }

    2)在实例方法中引用Log

    public class Person {
        protected final Log log = LogFactory.getLog(getClass());
    
        void foo() {
            log.info("foo");
        }
    }

    注意到实例变量log的获取方式是LogFactory.getLog(getClass()),虽然也可以用LogFactory.getLog(Person.class),但是前一种方式有个非常大的好处,就是子类可以直接使用该log实例。例如:

    // 在子类中使用父类实例化的log:
    public class Student extends Person {
        void bar() {
            log.info("bar");
        }
    }

    由于Java类的动态特性,子类获取的log字段实际上相当于LogFactory.getLog(Student.class),但却是从父类继承而来,并且无需改动代码。

    3)info(String, Throwable)

    Commons Logging的日志方法,除了标准的info(String)外,还提供了一个非常有用的重载方法:info(String, Throwable),这使得记录异常更加简单:

    try {
        ...
    } catch (Exception e) {
        log.error("got exception!", e);
    }

    他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!
  • 相关阅读:
    JDBC操作数据库的步骤 ?
    switch 是否能作用在 byte 上,是否能作用在 long 上, 是否能作用在 String 上?
    有哪些不同类型的IOC(依赖注入)方式?
    ApplicationContext通常的实现是什么?
    如何给Spring 容器提供配置元数据?
    一个”.java”源文件中是否可以包含多个类(不是内部类)? 有什么限制?
    数据库连接(Database link)?
    你怎样定义类的作用域?
    JSP的常用指令有哪些?
    Mapper 编写有哪几种方式?
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12361051.html
Copyright © 2011-2022 走看看