SpringBoot+Logback

Logback介绍:

Logback是由log4j创始人设计的另一个开源日志组件,大致分为以下三个模块:

  • logback-core:是其他两个模块的基础模块

  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或

  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

logback内部构造原理介绍:

  • Logger、appender及layout:
    Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。
    Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
    Layout 负责把事件转换成字符串,格式化的日志信息的输出。

  • 每个Logger实例都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各个logger。其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得。 getLogger方法以 logger名称为参数。用同一名字调用LoggerFactory.getLogger 方法所得到的永远都是同一个logger对象的引用。

    Logback级别相关介绍:

  • 有效级别及级别的继承:
    每个Logger 可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 、ERROR,定义在ch.qos.logback.classic.Level类中。如果 Logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。root logger 默认级别是 DEBUG。

  • 日志打印的规则:
    例如:如果Log是一个Logger实例,那么语句Log.info(“xxxx”)是一个INFO级别的记录语句,那么当Logger实例的有效级别不小于(高于或等于)INFO级别时,该条语句才可能被执行,此时该记录语句状态称为’被启用’ 否则称为’被禁用’。

  • logback核心日志级别的排序:TRACE < DEBUG < INFO < WARN < ERROR

快速上手:

Maven配置项:

<!--logback start-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.7</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.7</version>
        </dependency>
        <!--end-->

在application.properties同级目录下创建一个logback的配置文件,Springboot默认集成的就logback,,SpringBoot启动时会默认加载在 classpath下的logback-xxxx.xml的文件。如果配置文件 logback-xxx.xml不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender 组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的 PatternLayoutEncoder 进行格式化输出。root logger 默认级别是 DEBUG。

这里我们创建一个logback-spring.xml,内容如下:

<configuration>
    <property name="LOG_FOLDER" value="DemoLogs"/>
    <property name="LOG_FILE" value="MyDemoApplication"/>
    <appender name="MAIN_ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender" >
        <file>${LOG_FOLDER}/${LOG_FILE}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FOLDER}/${LOG_FILE}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">   
          <level>INFO</level>
          <onMatch>ACCEPT</onMatch>   
          <onMismatch>DENY</onMismatch>   
       </filter>
        <encoder>
            <!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%X{traceId}] [%thread] %-5level %logger - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>

    </appender>

     <appender name="ERROR_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender" >
         <file>${LOG_FOLDER}/${LOG_FILE}-error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
          <fileNamePattern>${LOG_FOLDER}/${LOG_FILE}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">   
          <level>ERROR</level>   
          <onMatch>ACCEPT</onMatch>   
          <onMismatch>DENY</onMismatch>   
        </filter>
        <encoder>
            <!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%X{traceId}] [%thread] %-5level %logger - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{1000} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <root>
        <appender-ref ref="MAIN_ROLLING"/>
        <appender-ref ref="ERROR_INFO"/>
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

logback配置文件配置项大致介绍:

  • 配置文件的基本结构:以 configuration 开头,后面有零个或多个 appender 元素,有零个或多个 logger 元素,有最多一个 root 元素。

  • 根节点 configuration ,包含下面三个属性:
      scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
      scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
      debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

<configuration scan="true" scanPeriod="60 seconds" debug="false"> 
<!--其他配置省略--> 
</configuration>
  • 子节点 property :用来定义变量值,它有两个属性name和value,通过 property 定义的值会被插入到logger上下文中,可以使“${}”来使用变量。
    name: 变量的名称
    value: 的值时变量定义的值
<configuration>
 <property name="LOG_FOLDER" value="DemoLogs"/>
 <property name="LOG_FILE" value="MyDemoApplication"/>
</configuration>
  • 子节点 appender :负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。
    1、常用appender:ch.qos.logback.core.rolling.RollingFileAppender
    滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。该标签有以下子节点:
    file:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
    append :如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
    encoder :对日志进行格式化输出;
    rollingPolicy :当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。
<appender name="ERROR_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender" >
         <file>${LOG_FOLDER}/${LOG_FILE}-error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_FOLDER}/${LOG_FILE}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">   
          <level>ERROR</level>   
          <onMatch>ACCEPT</onMatch>   
          <onMismatch>DENY</onMismatch>   
        </filter>
        <encoder>
            <!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%X{traceId}] [%thread] %-5level %logger - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

3、常用appender:
ch.qos.logback.core.ConsoleAppender 把日志输出到控制台,有以下子节点:
target:字符串System.out(默认)或者System.err
encoder:对日志进行格式化输出;

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{1000} - %msg%n</pattern>
    </encoder>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>DEBUG</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
      </filter>
 </appender>
  • 子节点loger:用来设置某一个包或具体的某一个类的日志打印级别、以及指定appenderloger仅有一个name属性,一个可选的level和一个可选的addtivity属性。
    可以包含零个或多个appender-ref元素,标识这个appender将会添加到这个loger
      name: 用来指定受此loger约束的某一个包或者具体的某一个类。
      level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前loger将会继承上级的级别。
    addtivity: 是否向上级loger传递打印信息。默认是true。同loger一样,可以包含零个或多个appender-ref元素,标识这个appender将会添加到这个loger。
<appender name="ClassLogInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/ClassLogInfo.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FOLDER}/ClassLogInfo-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 该类的所有日志的记录信息将会统一在ClassLogInfo文件中统一存储-->
    <logger name="com.swagger.demo.controller.SwaggerControllerTest" additivity="true">
        <appender-ref ref="ClassLogInfo"/>
    </logger>
  • 子节点root:它也是loger元素,但是它是loger的根,是所有loger的上级。只有一个level属性,level用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,不能设置为INHERITED或者同义词NULL。 默认是DEBUG。
    因为name已经被命名为”root”,且已经是最上级了。
    appender-ref:来指定appender可以包含零个或多个子标签appender-ref

注意:加粗字符表示子标签如上:appender-ref表示

<appender-ref>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值