logback

基础概念logback.xml 文件结构rootloggerappenderroot logger appender三者的关系实际项目实践指定log文件输出地址控制台日志appender 配置详解appender的种类filterrollingPolicy 子标签TimeBasedRollingPolicyfile 标签encoder 标签logger配置详解

以知乎文章为基础知乎logback 实际结合项目gridv为例

基础概念

开始前先来一张图比较好理解

logback.xml 文件结构

img

所以先来弄清楚这三个东东是什么

root

根logger,也是一种logger,且只有一个level属性

logger

用来设置某一个包或者具体的某一个类的日志打印级别以及指定appender

appender

负责写日志的组件,PS,我还没看到详细的,这里要补充

root logger appender三者的关系

root是跟logger,所以他们两是一回事,只不过root中不能有nameadditivity属性,只有一个level

appender是一个日志打印的组件,这个组件里面定义了打印过滤的条件、打印输出方式、滚动策略、编码方式、打印格式等。但它仅仅是一个打印组件,如果我们不适用一个logger或者rootappender-ref指定某个具体的appender时,它就没有任何用处的。

**因此appender让程序知道怎么打、打印到那里、打印成怎么样;而logger则是告诉程序哪些代码可以这么打。即某个类下的代码,可以使用这个appender打印

实际项目实践

指定log文件输出地址

文章中使用的是.properties文件,和我的项目.yml有点区别


文中设置 .properties和日志级别

#设置应用的日志级别
logging.level.com.glmapper.spring.boot=INFO

路径

logging.path=./logs


项目中设置 .yml

#路径
spring:
logistics-log:
path: ./logs

logging:

设置log文件名称命名,$是引用的意思

file: {spring.application.name}.log

设置应用的日志级别,info即代表info以上的都会打印出来,譬如error、warn

level:
root:info

设置log配置文件路径,classpath即代表工程里的resources文件夹下,输出里则在classes下

config: classpath:logback-spring.xml

所以就会输出到项目根目录下的logs

控制台日志

文中的代码





%d{HH:mm:ss.SSS} %-5level %logger{80} - %msg%n




打印日志的源代码

private static final Logger LOGGER =
LoggerFactory.getLogger(HelloController.class);
@Autowired
private TestLogService testLogService;

@GetMapping("/hello")
public String hello(){
LOGGER.info("GLMAPPER-SERVICE:info");
LOGGER.error("GLMAPPER-SERVICE:error");
testLogService.printLogToSpecialPackage();
return "hello spring boot";
}

验证结果

01:50:39.633 INFO com.glmapper.spring.boot.controller.HelloController

  • GLMAPPER-SERVICE:info
    01:50:39.633 ERROR com.glmapper.spring.boot.controller.HelloController
  • GLMAPPER-SERVICE:error

项目中的跟文中的区别不打,就不贴出来了

appender 配置详解

appender有两个属性,name和class,name指定appender名称,class指定appender的全限定名

以文中代码为例

 class="ch.qos.logback.core.rolling.RollingFileAppender">
true

{logging.path}/glmapper-spring-boot/glmapper-loggerone.log


${logging.path}/glmapper-spring-boot/glmapper-loggerone.log.%d{yyyy-MM-dd}
30


%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
UTF-8

appender的种类

  • ConsoleAppender:把日志添加到控制台

  • FileAppender:文件

  • RollingFileAppender:滚动记录文件,先记录日志到指定文件,当符合某个条件时,将日志记录到其他文件。

filter

filter其实是appender里面的子元素。它作为过滤器存在,执行一个过滤器会有返回DENY,NEUTRAL,ACCEPT三个枚举值中的一个。

  • DENY:日志将立即被抛弃不再经过其他过滤器

  • NEUTRAL:有序列表里的下个过滤器接着处理日志

  • ACCEPT:日志会被立即处理,不再经过剩余过滤器

    ThresholdFilter

    临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或者高于临街值时,过滤器返回neutral,当日志级别低于临界值时,日志被拒绝


    INFO

    LevelFilter

    级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath(用于配置符合过滤条件的操作) 和 onMismatch(用于配置不符合过滤条件的操作)接收或拒绝日志。


    INFO
    ACCEPT
    DENY

rollingPolicy 子标签

这个子标签用来描述滚动策略

TimeBasedRollingPolicy

最常用的滚动策略,根据事件来滚动

  • FileNamePattern

  • maxHistory

     class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


    ${logging.path}/glmapper-spring-boot/glmapper-loggerone.log.%d{yyyy-MM-dd}


    30

    上面的这段配置表明每天生成一个日志文件,保存30天的日志文件

file 标签

用于指定被写入的文件名,可以使相对路径或者绝对路径,如果伤及目录不存在就会自动创建


${logging.path}/glmapper-spring-boot/glmapper-loggerone.log

这个表示当前appender将会将日志写入到${logging.path}/glmapper-spring-boot/glmapper-loggerone.log这个目录下

encoder 标签

对记录事件进行格式化,把日志信息转换成字节数组,把字节数组写入到输出流


%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}

  • %msg%n
    UTF-8

logger配置详解

 level="${logging.level}" additivity="false">

上面的这个配置文件描述的是:com.glmapper.spring.boot.controller这个包下的${logging.level}级别的日志将会使用GLMAPPER-LOGGERONE来打印。logger有三个属性和一个子标签:

  • name:用来指定受此logger约束的某一个包或者具体的某一个类。

  • level:用来设置打印级别(TRACE, DEBUG, INFO, WARN, ERROR, ALLOFF),还有一个值INHERITED或者同义词NULL,代表强制执行上级的级别。如果没有设置此属性,那么当前logger将会继承上级的级别。

  • addtivity:用来描述是否向上级logger传递打印信息。默认是true

appender-ref则是用来指定具体appender的。

你可能感兴趣的:(logback)