Logback是流行的log4j项目的继承者,Logback的体系结构足够通用,可以应用于不同的环境。目前,logback分为三个模块,即logback-core、logback-classic和logback-access。
logback-core模块为其他两个模块奠定了基础。
logback-classic模块可以被同化为log4j的显著改进版本。此外,logback-classic本机实现了SLF4J API,这样您就可以随时在logback和其他日志框架(如log4j或java.util)之间来回切换。
logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP-access日志功能。请注意,您可以轻松地在logback-core之上构建自己的模块。
简单的分析一下logback加载的过程,当我们使用logback-classic.jar包时,应用启动后,将会按照如下的顺序进行扫描一些配置文件。
加载不顺序如下图所示:
以上任何一项找到后,就不会再继续向下查找配置文件,如果都没有找到这些文件,就会调用ch.qos.logback.classic.BasicConfigurator的configure方法,构造出一个ConsoleAppender用于向控制台输出默认配置的日志信息,输出的日志信息为"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"。
接下来通过代码来测试几种情况:
logback.xml的配置为:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
测试代码为:
public class Main {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Object.class);
logger.trace("-------trace---------");
logger.debug("-------debug---------");
logger.info("-------info---------");
logger.warn("-------warn---------");
logger.error("-------error---------");
}
}
打印结果如下:
从logback.xml中,分析出,当main方法运行时,root节点将日志级别大于等于debug的日志信息交给已经配置好的STDOUT的appender进行处理,“STDOUT”将信息打印到控制台上。
再对logback.xml进行修改,增加一个
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
运行日志信息的情况如下:
当运行的时候,会根据logger的name的属性值找到指定包下或者特定的类。
再来一个例子:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
如果上面的例子懂了,那么再来理解一下这个例子:
对于
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
另一种是将日志信息输出到文件中的FileAppender,其内部的节点主要有以下几个:
以下是FileAppender类型的配置文件的情况:
E:/logback.log
true
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
true
还有一种RollingFileAppender,RollingFileAppender的作用是可以滚动记录日志文件,先将指定的日志文件提交到指定文件,当符合某个条件时再将日志记录到其他文件,当符合某个条件时再将日志记录到其他文件,RollingFileAppender配置更加灵活,因此用得更多。
rolling-file-%d{yyyy-MM-dd}.log
6
%-4relative [%thread] %-5level %logger{35} - %msg%n
其内部有一个
针对LevelFilter这个类,它指的是将指定级别日志信息打印输出。来看一下下面的这个例子
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
ERROR
ACCEPT
DENY
运行结果:
这和前面讲过的例子一样,无非是加了一个
最后再测试一下ThreshouldFilter,配置文件如下:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
INFO
运行结果:
以上仅仅是自己做的一点小小的总结,有不足的地方还请大家指点。