logback 三大模块
记录器(Logger)、追加器(Appender)和布局(Layout)
配置文件外层最基本的标签如图示
xml中定义的就是这个三个东西下面进入学习
包引入参考springboot 官方文档 Logging :: Spring Boot
我用的是springboot项目进行学习的,所以仅仅导入spring-boot-starter-web一个依赖就行,它默认使用的就是slf4j作为日志接口门面,使用logback作为默认接口实现,如图示
1.日志等级划分
1.基础输出
具体详情请参考官方文档:Chapter 2: Architecture
log等级划分为 trace < debug < info < warn < error
假设log定义为info时候,打印日志如果小于info,那么日志不会进行输出,样例如下:
//由于配置定义的是 info 集别 根据 集别优先级 所以不会打印 trace和debug
//trace < debug <info <warn < error
ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("simple.consoleAppender");
@GetMapping("/simpleConsoleAppender")
public String index() {
logger.trace("simple.consoleAppender [ trace ] hello world ");
logger.debug("simple.consoleAppender [ debug ] hello world ");
logger.info("simple.consoleAppender [ info ] hello world ");
logger.warn("simple.consoleAppender [ warn ] hello world ");
logger.error("simple.consoleAppender [ error ] hello world ");//
return "index";
}
2.父子关系演示
关于日志还有父子关系的结构,可以认为就是java类父子关系,假设定义日志名称为com.group.order.service,那么logback 就会创建关系为:root->com->group->order->service
的5种日志name。如果你用的是com.group 输出的日志,那么就会向上依次查找,如果都没有定义,那么使用默认root级别level,默认为debug级别,下面是演示
//由于配置定义的是 info 集别 根据 集别优先级 所以不会打印 trace和debug
//trace < debug <info <warn < error
ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("simple.consoleAppender");
ch.qos.logback.classic.Logger loggerSimple = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("simple");
ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
@GetMapping("/simpleConsoleAppender")
public String index() {
//定义的info级别
logger.trace("simple.consoleAppender [ trace ] hello world ");
logger.debug("simple.consoleAppender [ debug ] hello world ");
logger.info("simple.consoleAppender [ info ] hello world ");
logger.warn("simple.consoleAppender [ warn ] hello world ");
logger.error("simple.consoleAppender [ error ] hello world ");//
//未定义的simple日志 会自动向上查询level级别
loggerSimple.trace("loggerSimple.consoleAppender [ trace ] hello world ");
loggerSimple.debug("loggerSimple.consoleAppender [ debug ] hello world ");
loggerSimple.info("loggerSimple.consoleAppender [ info ] hello world ");
loggerSimple.warn("loggerSimple.consoleAppender [ warn ] hello world ");
loggerSimple.error("loggerSimple.consoleAppender [ error ] hello world ");//
//打印root 的默认集别
System.out.println("root level = " + rootLogger.getEffectiveLevel());//
return "index";
}
以上demo的xml配置如下 spring-logback.xml
<!--<configuration debug="true">-->
<configuration >
<logger name="simple.consoleAppender" level="INFO" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
2.log xml 定义
1.最简单的输出定义
参考上面xml定义。记录器(Logger)、追加器(Appender)
就是上面的logger标签和appender标签,
logger主要就是两个属性,日志名称name和日志级别level
2.Appender分析
顶级接口Appender两个实现类
这里主要分析,UnsynchronizedAppenderBase,因为后续主要围绕这几个实现类来做日志配置
主要使用的就是下面这些
ConsoleAppender 控制台打印日志输出:Chapter 4: Appenders
WARNING Please note the console is comparatively slow, even very slow. You should avoid logging to the console in production, especially in high volume systems.
警告:请注意,控制台相对较慢,甚至非常慢。在生产环境中,尤其是在高流量系统中,应避免向控制台输出日志。
FileAppender 文件日志输出:第 4 章:附加程序
RollingFileAppender 可备份滚动日志文件 第 4 章:附加程序
个人学习视频记录 结合官方文档自学logback_哔哩哔哩_bilibili