log4j源码2

原创 2018年04月17日 10:40:58

Test.java:

logger.debug("log4j debug level info");

Category.java:

public void debug(Object message) {

        if (repository.isDisabled(Level.DEBUG_INT))
            return;
        if (Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
            forcedLog(FQCN, Level.DEBUG, message, null);
        }
    }

protected void forcedLog(String fqcn, Priority level, Object message, Throwable t) {
        callAppenders(new LoggingEvent(fqcn, this, level, message, t));
    }

public void callAppenders(LoggingEvent event) {
        int writes = 0;

        for (Category c = this; c != null; c = c.parent) {
            synchronized (c) {
                if (c.aai != null) {
                    writes += c.aai.appendLoopOnAppenders(event);
                }
                if (!c.additive) {
                    break;
                }
            }
        }
        if (writes == 0) {
            repository.emitNoAppenderWarning(this);
        }
    }

AppenderAttachableImpl.java:

public int appendLoopOnAppenders(LoggingEvent event) {
        int size = 0;
        Appender appender;

        if (appenderList != null) {
            size = appenderList.size();
            for (int i = 0; i < size; i++) {
                appender = (Appender) appenderList.elementAt(i);
                appender.doAppend(event);
            }
        }
        return size;
    }

AppenderSkeleton.java:

public synchronized void doAppend(LoggingEvent event) {

        if (closed) {
            LogLog.error("Attempted to append to closed appender named [" + name + "].");
            return;
        }

        if (!isAsSevereAsThreshold(event.getLevel())) {
            return;
        }
        Filter f = this.headFilter;

        FILTER_LOOP:
        while (f != null) {
            switch (f.decide(event)) {
                case Filter.DENY:
                    return;
                case Filter.ACCEPT:
                    break FILTER_LOOP;
                case Filter.NEUTRAL:
                    f = f.getNext();
            }
        }

        this.append(event);
    }

WriterAppender.java:

public void append(LoggingEvent event) {

        if (!checkEntryConditions()) {
            return;
        }
        subAppend(event);
    }

protected void subAppend(LoggingEvent event) {

        this.qw.write(this.layout.format(event));

        if (layout.ignoresThrowable()) {
            String[] s = event.getThrowableStrRep();
            if (s != null) {
                int len = s.length;
                for (int i = 0; i < len; i++) {
                    this.qw.write(s[i]);
                    this.qw.write(Layout.LINE_SEP);
                }
            }
        }

        if (shouldFlush(event)) {
            this.qw.flush();
        }
    }

RollingFileAppender.java:

protected void subAppend(LoggingEvent event) {
        super.subAppend(event);
        if (fileName != null && qw != null) {
            long size = ((CountingQuietWriter) qw).getCount();
            if (size >= maxFileSize && size >= nextRollover) {
                rollOver();
            }
        }
    }

日志框架commons-logging和Log4j应用

本课程主要讲解日志框架commons-logging和Log4j基本应用和分析,适合于所有java开发人员
  • 2016年12月13日 22:36

log4j2下载及用法简介

第一步: 下载http://logging.apache.org/log4j/2.x/download.html  下载apache-log4j-2.8.2-bin.zip,导入log4j-api-...
  • qq_24172609
  • qq_24172609
  • 2017-07-07 11:18:49
  • 297

Log4j2架构分析与实战

Log4j2是Log4j的升级版,与之前的版本Log4j 1.x相比、有重大的改进,在修正了Logback固有的架构问题的同时,改进了许多Logback所具有的功能。...
  • lixiaoxiong55
  • lixiaoxiong55
  • 2016-05-08 23:49:03
  • 4104

log4j源码 log4j源码

  • 2011年08月18日 09:35
  • 450KB
  • 下载

Log4j源码解析--框架流程+核心解析

OK,现在我们来研究Log4j的源码: 这篇博客有参照上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.ht...
  • u011794238
  • u011794238
  • 2016-02-25 13:31:40
  • 5991

log4j源码简要分析 | 读取配置文件

LogManager在初始化的过程中,读取log4j.configuration系统变量的值,生成配置文件的url,默认为log4j.properties或log4j.xml.然后用PropertyC...
  • zhanghandong
  • zhanghandong
  • 2006-09-05 00:17:00
  • 5099

log4j 源代码 log4j 源代码

  • 2009年05月25日 20:36
  • 409KB
  • 下载

Log4j 1.x 升级 Log4j 2.x (调研和升级)

因为公司业务需要,目前的log4j 1.x 遇到死锁,需要升级到Log4j 2.x。现在对目前的日志框架进行调研,并根据目前的现状提出升级的方法。 一引言 对于一个应用程序来说日志记录是必不可少的一...
  • whbing1471
  • whbing1471
  • 2017-07-03 23:07:19
  • 794

从源码修改log4j的启动方式

log4j的启动是由LogManager类控制的,在LogManager中的静态代码块,决定了其在系统启动时就会被加载。 但有时为了让其延迟加载,将相关变量由spring容器传给log4j,就需要在s...
  • waysoflife
  • waysoflife
  • 2016-07-07 16:04:46
  • 948

log4j与log4j2的区别

log4j是Apache的一个开源项目,我们不去考究它的起源时间,但是据我了解,log4j 1已经不再更新了。 1.配置文件类型 log4j是通过一个*.properties的文件作为主配置文...
  • fansenjun
  • fansenjun
  • 2016-12-22 14:35:29
  • 2146
收藏助手
不良信息举报
您举报文章:log4j源码2
举报原因:
原因补充:

(最多只允许输入30个字)