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>