当前位置: 代码迷 >> 综合 >> SpringBoot —— 整合Logback,输出日志到文件
  详细解决方案

SpringBoot —— 整合Logback,输出日志到文件

热度:144   发布时间:2023-09-18 12:49:20

文章目录

  • 前言
  • 一、logback日志组件
    • 1.日志等级
    • 2.打印日志
  • 二、配置
    • 1.简单配置
    • 2.扩展配置
    • 3.代码测试
  • 三、启动过程的错位
  • 总结

前言

SpringBoot系列Demo代码,整合logback,设置输出日志。

一、logback日志组件

logback是一款开源日志组件,属于Log4j的升级版本,现在项目组使用的次数越来越多。

1.日志等级

日志级别有(从高到低):FATAL(致命),ERROR(错误),WARN(警告),INFO(信息),DEBUG(调试),TRACE(跟踪)或者 OFF(关闭),默认的日志配置在消息写入时将消息回显到控制台。默认情况下,将记录错误级别、警告级别和信息级别的消息。

2.打印日志

通过Class的方式初始化

private final static Logger LOGGER = LoggerFactory.getLogger(HelloLogback.class);

二、配置

1.简单配置

如果不需要进行复杂的日志配置,则在配置文件中进行简单的日志配置即可(默认情况下,SpringBoot日志只记录到控制台,不写日志文件)

#日志配置
logging:level:#日志级别 root表示所有包,也可以单独配置具体包 fatal error warn info debug trace offroot: infofile:path: /local/log/devname: app.log

2.扩展配置

如果需要比较复杂的配置,建议使用扩展配置的方式,SpringBoot推荐我们使用带-spring后缀的 logback-spring.xml 扩展配置,因为默认的的logback.xml标准配置,Spring无法完全控制日志初始化。(spring扩展对springProfile节点的支持)

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:程序运行时配置文件被修改,是否重新加载。true=重新加载;false=不重新加载;默认为true; -->
<!-- scanPeriod:监测配置文件被修改的时间间隔,scan属性必须设置为true才可生效;默认为1分钟,默认单位是毫秒; -->
<!-- debug:是否打印logback程序运行的日志信息。true=打印;false=不打印;默认为false; -->
<configuration scan="true" scanPeriod="60" debug="false"><!--日志文件主目录--><property name="LOG_HOME" value="/local/log/dev"/><!--日志格式--><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--><property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %X[%thread] %-5level %logger{50} %line - %msg%n"/><!--日志文件名称 spring.application.name表示工程名称--><property name="APP_NAME" value="app"/><!-- <springProperty scope="context" name="APP_NAME" source="spring.application.name"/>--><!-- &lt;!&ndash;默认配置&ndash;&gt;--><!-- <include resource="org/springframework/boot/logging/logback/defaults.xml"/>--><!-- &lt;!&ndash;配置控制台(Console)&ndash;&gt;--><!-- <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>--><!-- 配置磁盘文件滚动输出日志 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--设置策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--日志文件路径:这里%d{yyyyMMdd}表示按天分类日志--><FileNamePattern>${LOG_HOME}/%d{yyyyMMdd}/${APP_NAME}.%i.log</FileNamePattern><!--设置日志保留天数--><MaxHistory>15</MaxHistory><!--设置最大日志大小--><MaxFileSize>14KB</MaxFileSize></rollingPolicy><!--设置日志输出格式--><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${pattern}</pattern><charset>UTF-8</charset></encoder><!--此日志文件只记录 【debug / info / warn / error】 级别的--><!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">--><!-- <level>【debug / info / warn / error】</level>--><!-- <onMatch>ACCEPT</onMatch>--><!-- <onMismatch>DENY</onMismatch>--><!-- </filter>--></appender><!--控制台输出日志 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><!-- 设置日志输出格式 --><pattern>${pattern}</pattern><!-- 设置输出字符集编码 --><charset>UTF-8</charset></encoder></appender>
<!-- <root level="INFO">-->
<!-- <appender-ref ref="FILE"/>-->
<!--        &lt;!&ndash;为了直观,在控制天中也输出info级别的日志&ndash;&gt;-->
<!-- <appender-ref ref="CONSOLE"/>-->
<!-- </root>--><!-- 把日志异步输出到磁盘文件中,避免每次都进行磁盘IO操作 --><appender name="ASYNC-FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>0</discardingThreshold><queueSize>256</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref="FILE"/></appender><!--多环境配置 按照active profile选择分支--><springProfile name="dev"><!--root节点 全局日志级别,用来指定最基础的日志输出级别--><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="ASYNC-FILE"/></root><!-- 子节点向上级传递 局部日志级别--><!-- <logger level="WARN" name="org.springframework"/>--><!-- <logger level="WARN" name="com.netflix"/>--><!-- <logger level="DEBUG" name="org.hibernate.SQL"/>--></springProfile><springProfile name="prod"><root level="INFO"><!--生产环境,可以不需要再控制台输出日志--><!--<appender-ref ref="CONSOLE"/>--></root></springProfile>
</configuration>

springProfile节点设置,application.yml

spring:profiles:active: dev

3.代码测试

SpringBoot —— 整合Logback,输出日志到文件

SpringBoot —— 整合Logback,输出日志到文件
SpringBoot —— 整合Logback,输出日志到文件
启动项目,调用接口,查看日志文件输出
SpringBoot —— 整合Logback,输出日志到文件
SpringBoot —— 整合Logback,输出日志到文件

三、启动过程的错位

在项目启动时,出现如下错误:
SpringBoot —— 整合Logback,输出日志到文件

发现时MaxFileSize出现错误,排查后发现是配置文件中错误:
SpringBoot —— 整合Logback,输出日志到文件
SpringBoot —— 整合Logback,输出日志到文件
TimeBasedRollingPolicy中并没有MaxFileSize属性,于是修改为SizeAndTimeBasedRollingPolicy
SpringBoot —— 整合Logback,输出日志到文件
启动正常,问题成功解决。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了日志根据时间和大小输出到文件的实现,后续还会完善。

? 上一章:SpringBoot —— Swagger UI、Swagger-Bootstrap-UI,API实时接口文档
? 下一章:SpringBoot —— 实现邮件、短信的发送功能