logback的简单使用

时间:2025-02-13 08:43:09

logback是一个非常好用的日志组件,并且logback已经集成到了springboot中,我们可以去查看spring-boot-starter,发现里面含有spring-boot-starter-logging,该日志就是默认集成的logback。

当我们启动springboot时,会发现控制台输出了日志,这是因为springboot有一个默认的logback配置,该配置设置了一些简单的日志输出,方便我们进行日志查看,当然,我们想要使用自定义的日志输出也十分简单,只需要在resource目录下创建文件,并进行简单的配置即可。

在进行配置之前,我们先来了解一下一些属性:

configuration为配置的根节点,其中有:scan,scanPeriod和debug三个属性。

scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true。

scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

property为设置变量,其中有name和value两个属性,分别表示变量名和变量值。通过${name}来使用。我们可以通过这个标签来配置日志存放的目录或者输出日志的格式。

appender是用来格式化日志输出的标签,其中有name和class两个属性,class用来指定是哪种输出策略,常见的有控制台输出和文件输出。

  • ConsoleAppender:控制台输出
  • *FileAppender:文档输出
  • *RollingFileAppender:当满足一定条件后,会创建一个新的文件,用于存放新的日志信息

appender中还有一些其他标签:encoder、file、rollingPolicy、filter等。

encoder:用于指定输出,配合pattern标签使用。

file:用于设置文档路径和文档名。

rollingPolicy:滚动策略,可以根据时间、文件大小来指定滚动策略。

filter:用于过滤日志信息,可以指定过滤一些级别的日志信息。

springProfile用于指定多环境,例如开发中会有开发环境,测试环境以及生产环境,我们可以通过springProfile标签来制定不同的环境从而输出不同的日志。

springProfile标签通过name属性来指定环境,而后只需要在application配置文件中指定环境,logback即可自动匹配相应的环境进行日志输出。

root标签是用来指定最基础的日志输出级别,其中只有level一个属性,默认为debug,是必填项,可填入(不区分大小写)TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。

appender-ref标签:可以包含零个或多个元素,标识这个appender将会添加到这个loger,即只有appender-ref标签中的ref属性指定的appender才会进行日志输出。

logger标签中有多个属性,常用的有name和level。

name用来指定某个类,level用来指定日志输出的级别,通常用这个标签来指定某个类中只输出某等级以上的日志信息。

以上就是logback中比较基本的配置了,当然还有很多标签,详细的可以前往官网查看,这里就不多说了,以下为我写的一个简单的例子,可以通过该例子理解一些标签的作用,当然也可以直接使用我这个配置,使用时只需要改一下

<property name="home" value="/www/wwwroot/logs"/>

中的value即可,这个是日志文件输出的目录。

然后在application配置文件中配置:

spring:
  profiles:
    active: dev
logging:
  config:
    classpath:

可能有些人不懂我这个配置是什么意思,我就稍微讲一下,一般项目中会有、、和等配置文件,用来写入开发,测试和生产环境的配置,通过中的active指定环境。 

用来指定所使用的logback配置。

以下为我的logback配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">

    <!-- name的值为变量的名称,value的值为变量的值。定义变量后,可以使“${}”来使用变量。 -->
    <property name="home" value="/www/wwwroot/logs"/>

    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="" />
    <conversionRule conversionWord="wex" converterClass="" />
    <conversionRule conversionWord="wEx" converterClass="" />

    <!-- 彩色日志输出 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss}){faint} %clr(|%-5level|) %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!-- 输出到控制台 -->
    <appender name="CONSOLE" class="">
        <encoder>
            <!-- 输出格式 -->
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 输出到文档 -->
    <!-- 这里的ALL_FILE我们设置为输出全部日志,当然也可以配置其他用来输出不同级别的日志 -->
    <appender name="ALL_FILE" class="">
        <!-- 日志文档的路径和文档名 -->
        <file>${home}/</file>
        <!-- 输出格式 -->
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss} | %-5level | [${PID:- }] %-40.40logger{39} | %msg%n</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="">
            <!-- 若天数改变或者大小达到设定值后,会将当前日志归档,以日期.下标命名 -->
            <fileNamePattern>${home}/all-%d{yyyy-MM-dd}.%</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="">
                <!-- 设置最大日志大小 -->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 日志保留天数 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 设置日志输出策略 -->
    <!-- 这里设置为开发环境,只进行控制台输出,输出级别为debug -->
    <springProfile name="dev">
        <root level="debug">
            <!-- 开发环境只输出到控制台 -->
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="ALL_FILE" />
        </root>
    </springProfile>

    <!-- 这里设置为生产环境,只进行日志文档输出,输出级别为info -->
    <springProfile name="prod">
        <root level="info">
            <!-- 生产环境只设置文档输出 -->
            <appender-ref ref="ALL_FILE" />
        </root>
    </springProfile>

    <!--  以下日志设置输出级别  -->
    <logger name="" level="INFO"/>
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="springfox" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />
    <logger name="" level="INFO" />

</configuration>