标签 - 框架

日志 框架 源码    2016-03-07 16:09:42    505    0    0

Commons-Logging的使用

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class App
{
    private static final Log log = LogFactory.getLog(App.class);

    public static void main( String[] args ) {
        log.info("rizhi ....");
    }
}

启动过程分析

可以看到,Log是通过LogFactory.getLog(Class clzz)方法获取的。
而getLog方法内部又是通过getFactory()方法,先获取到LogFactory,然后再创建Log的。

所以,commons-logging在选在使用哪个日志实现的时候,实际上是先选择使用哪个LogFactory。下面我们就来看一下这个过程(LogFactory类的public static LogFactory getFactory() throws LogConfigurationException方法)。

1. 首先查找缓存的LogFactory,找到就直接返回,否则继续下一步

 // Identify the class loader we will be using
        ClassLoader contextClassLoader = getContextClassLoaderInternal();

        if (contextClassLoader == null) {
            // This is an odd enough situation to report about. This
            // output will be a nuisance on JDK1.1, as the system
            // classloader is null in that env
日志 框架 源码    2016-03-05 12:24:49    2244    0    0

简介

在系统开发中,日志是很重要的一个环节,日志写得好对于我们开发调试,线上问题追踪等都有很大的帮助。但记日志并不是简单的输出信息,需要考虑很多问题,比如日志输出的速度,日志输出对于系统内存,CPU的影响等,为此,出现了很多日志框架,以帮助开发者解决这些问题。

java中的常用日志框架

比较常用的有Log4j,SLF4j,Commons-logging,logback。当然,JDK本身也提供了java.util.logging包来提供对日志的支持。

Commons-loggin:是apache最早提供的日志的门面接口。它的主要作用是提供一个日志门面,使用者可以使用不同的日志实现。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。common-logging内部有一个Simple logger的简单实现,但是功能很弱。

SLF4j:是Simple Logging Facade for Java的简称,即java的简单日志门面。类似于Apache Common-Logging,是对不同日志框架提供的一个门面封装,可以在部署的时候不修改任何配置即可接入一种日志实现方案。但是,他在编译时静态绑定真正的Log库。使用SLF4J时,如果你需要使用某一种日志实现,那么你必须选择正确的SLF4J的jar包的集合(各种桥接包)。

Log4j:经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern等实现。我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。pache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。这些可以通过一个 配置文件来灵活地进行配置,而不需要修改程序代码。

logback:也是一种日志实现。Logback是由log4j创始人设