Logger, Appenders and Layouts
-Logger:日志分类和级别
-Appenders:日志输出的目的地
-Layout:日志格式
Logger context
日志上下文,用于创建logger并且将它们组织成一棵层级树。
Logger 命名
大小写敏感,并且遵守层级结构规则。
虽然可以随意命名,但是强烈建议使用当前类全名。
root:日志的顶级,和java.lang.Object类似,名字为org.slf4j.Logger.ROOT_LOGGER_NAME。
Logger 级别
ALL, TRACE, DEBUG, INFO, WARN, ERROR, OFF
日志的级别由它自己开始沿着层级结构向上追溯第一个非空的level值。例如
root | DEBUG | DEBUG |
X | INFO | INFO |
X.Y | none | INFO |
X.Y.Z | ERROR | ERROR |
Logger 输出方法
决定了日志输出所要求的级别,仅当该级别>=Logger级别时才能被输出。
日志级别排序
ALL < TRACE < DEBUG < INFO < WARN < ERROR < OFF
Logger 唯一性
LoggerFactory.getLogger 方法将返回同一个logger对象如果logger名字一样。
Appenders & Layouts & Encoder
一个Logger对应对应多个Appender,也就是可以将同一个日志输出到多个不同的目的地。
与Logger级别不一致,一个Logger将输出到由它自己开始沿着层级结构向上追溯的所有Appenders中,除非将additivity标志设置为false。
root | A1 | not applicable | A1 | Since the root logger stands at the top of the logger hierarchy, the additivity flag does not apply to it. |
x | A-x1, A-x2 | true | A1, A-x1, A-x2 | Appenders of "x" and of root. |
x.y | none | true | A1, A-x1, A-x2 | Appenders of "x" and of root. |
x.y.z | A-xyz1 | true | A1, A-x1, A-x2, A-xyz1 | Appenders of "x.y.z", "x" and of root. |
security | A-sec | false | A-sec | No appender accumulation since the additivity flag is set to false . Only appender A-sec will be used. |
security.access | none | true | A-sec | Only appenders of "security" because the additivity flag in "security" is set to false . |
Layout用于控制日志输出格式
Encoder 0.9.19版本之后取代Layout,Layout只负责将日志转化为String,而Encoder 能控制输出的String的字符集
注:Layout & Encoder 只能属于一个 Appender
参数化日志输出
支持占位符{}格式化日志,2个一下的参数采用下列形式传递
logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);
3个以上的参数需使用数组传递
Object[] paramArray ={newVal, below, above}; logger.debug("Value {} was inserted between {} and {}.", paramArray);
日志输出的流程图
参考资料
http://logback.qos.ch/manual/architecture.html