log4j学习笔记之打印日志
log4j日志级别共有7种:分别是ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF。看Priority类中的定义
public final static int OFF_INT = Integer.MAX_VALUE;public final static int FATAL_INT = 50000;public final static int ERROR_INT = 40000;public final static int WARN_INT = 30000;public final static int INFO_INT = 20000;public final static int DEBUG_INT = 10000;public final static int ALL_INT = Integer.MIN_VALUE;
public class Category implements AppenderAttachable { public void debug(Object message) {} public void info(Object message) {} public void warn(Object message) {} public void error(Object message) {}} public void debug(Object message) { if(repository.isDisabled(Level.DEBUG_INT)) return; if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.DEBUG, message, null); } } public boolean isDisabled(int level) { return thresholdInt > level; } public Level getEffectiveLevel() { for(Category c = this; c != null; c=c.parent) { if(c.level != null)return c.level; } return null; // If reached will cause an NullPointerException. } 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); } } 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; } 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 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); } 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(); } } public String format(LoggingEvent event) { if(sbuf.capacity() > MAX_CAPACITY) { sbuf = new StringBuffer(BUF_SIZE); } else { sbuf.setLength(0); } PatternConverter c = head; while(c != null) { c.format(sbuf, event); c = c.next; } return sbuf.toString(); } public void format(StringBuffer sbuf, LoggingEvent e) { String s = convert(e); if(s == null) { if(0 < min)spacePad(sbuf, min); return; } int len = s.length(); if(len > max) sbuf.append(s.substring(len-max)); else if(len < min) { if(leftAlign) {sbuf.append(s);spacePad(sbuf, min-len); } else {spacePad(sbuf, min-len);sbuf.append(s); } } else sbuf.append(s); } public String convert(LoggingEvent event) { switch(type) { case RELATIVE_TIME_CONVERTER:return (Long.toString(event.timeStamp - LoggingEvent.getStartTime())); case THREAD_CONVERTER:return event.getThreadName(); case LEVEL_CONVERTER:return event.getLevel().toString(); case NDC_CONVERTER:return event.getNDC(); case MESSAGE_CONVERTER: {return event.getRenderedMessage(); } default: return null; } } }private static final int LITERAL_STATE = 0; private static final int CONVERTER_STATE = 1; private static final int DOT_STATE = 3; private static final int MIN_STATE = 4; private static final int MAX_STATE = 5; static final int FULL_LOCATION_CONVERTER = 1000; static final int METHOD_LOCATION_CONVERTER = 1001; static final int CLASS_LOCATION_CONVERTER = 1002; static final int LINE_LOCATION_CONVERTER = 1003; static final int FILE_LOCATION_CONVERTER = 1004; static final int RELATIVE_TIME_CONVERTER = 2000; static final int THREAD_CONVERTER = 2001; static final int LEVEL_CONVERTER = 2002; static final int NDC_CONVERTER = 2003; static final int MESSAGE_CONVERTER = 2004;