前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 日志配置

Spring Boot 日志配置

作者头像
LCyee
发布2020-08-05 17:12:15
8320
发布2020-08-05 17:12:15
举报

日志功能需求

  • 将关键数据打印在控制台
  • 将关键数据打印在文件中
  • 日志分类,根据日志不同类型打印到不同文件
  • 不同的运行环境,打印不同的日志内容
  • 日志自动压缩、自动清理

日志的门面: SLF4J

SLF4J 只是一个门面程序,并不做具体的日志打印功能,需要整合LogBackLog4j 等第三方模块。

  • commons logging
  • jboss logging

官方文档:http://www.slf4j.org/manual.html

测试Hello World

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestController
public class HelloSpringBoot {
    Logger log = LoggerFactory.getLogger(HelloSpringBoot.class);
    @RequestMapping("hello")
    public String hello(){
        log.info("Hello");
        return "Hello SpringBoot";
    }
}

输出

从上面的代码中我们可以看出,如果项目中需要使用到slf4j做日志输出的话,在每一个类里面都需要定义,过于繁琐,下面我们使用 lombok 插件来实现 slf4j ,可以极大的简化我们的代码量。

在项目 pom 文件中引入 lombok 依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
</dependency>

控制器

@RestController
@Slf4j
public class HelloSpringBoot {
    @RequestMapping("hello")
    public String hello(){
        log.info("Hello");
        return "Hello SpringBoot";
    }
}

这里我们只需要在我们的类上引入一个@Slf4j 注解就可以实现slf4j日志输出功能。

自定义配置: LogBack

LogBack 特点

  • 更快的实现
  • 非常充分测试
  • 非常充分文档
  • 自动重新加载配置文件
  • 自动压缩
  • 自动去除旧的日志文件

配置 logback-spring.xml

线上环境记得修改日志的输出路径

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds" debug="false">
    <contextName>logback</contextName>
    <!-- 配置日志输出路径(注:放到服务器上后记得更改路径) -->
    <property name="log.split.path" value="D:\\logs\\logback_demo\\" />
    <!-- 配置日志名称 -->
    <property name="log.path" value="logback.log" />
    <!-- 配置切割后的debug日志输出路径 -->
    <property name="log.debug.path" value="debug" />
    <!-- 配置切割后的info日志输出路径 -->
    <property name="log.info.path" value="info" />
    <!-- 配置切割后的warn日志输出路径 -->
    <property name="log.warn.path" value="warn" />
    <!-- 配置切割后的error日志输出路径 -->
    <property name="log.error.path" value="error" />
    <!-- 配置日志文件最大数量 -->
    <property name="log.file.max.num" value="30" />
    <!-- 配置日志文件大小最大值 -->
    <property name="log.file.max.size" value="50MB" />
    <!-- 配置总日志文件大小最大值 -->
    <property name="log.file.total.max.size" value="2GB" />

    <!-- 输出到控制台 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--配置输出日志为彩色-->
            <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - %cyan(%msg%n)</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 配置debug级别日志 -->
    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 配置日志级别过滤器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 配置日志存放路径 -->
        <file>${log.split.path}${log.debug.path}/${log.path}</file>
        <!-- 配置日志切割器 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 配置日志切割策略:每天切割 -->
            <fileNamePattern>${log.split.path}${log.debug.path}/log_debug_back.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 配置日志数量 -->
            <maxHistory>${log.file.max.num}</maxHistory>
            <!-- 配置单个日志大小的最大值 -->
            <maxFileSize>${log.file.max.size}</maxFileSize>
            <!-- 配置总日志大小的最大值 -->
            <totalSizeCap>${log.file.total.max.size}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 配置info级别日志 -->
    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 配置日志级别过滤器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 配置日志存放路径 -->
        <file>${log.split.path}${log.info.path}/${log.path}</file>
        <!-- 配置日志切割器 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 配置日志切割策略:每天切割 -->
            <fileNamePattern>${log.split.path}${log.info.path}/log_info_back.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 配置日志数量 -->
            <maxHistory>${log.file.max.num}</maxHistory>
            <!-- 配置单个日志大小的最大值 -->
            <maxFileSize>${log.file.max.size}</maxFileSize>
            <!-- 配置总日志大小的最大值 -->
            <totalSizeCap>${log.file.total.max.size}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 配置warn级别日志 -->
    <appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 配置日志级别过滤器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 配置日志存放路径 -->
        <file>${log.split.path}${log.warn.path}/${log.path}</file>
        <!-- 配置日志切割器 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 配置日志切割策略:每天切割 -->
            <fileNamePattern>${log.split.path}${log.warn.path}/log_warn_back.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 配置日志数量 -->
            <maxHistory>${log.file.max.num}</maxHistory>
            <!-- 配置单个日志大小的最大值 -->
            <maxFileSize>${log.file.max.size}</maxFileSize>
            <!-- 配置总日志大小的最大值 -->
            <totalSizeCap>${log.file.total.max.size}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 配置error级别日志 -->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 配置日志级别过滤器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 配置日志存放路径 -->
        <file>${log.split.path}${log.error.path}/${log.path}</file>
        <!-- 配置日志切割器 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 配置日志切割策略:每天切割 -->
            <fileNamePattern>${log.split.path}${log.error.path}/log_error_back.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 配置日志数量 -->
            <maxHistory>${log.file.max.num}</maxHistory>
            <!-- 配置单个日志大小的最大值 -->
            <maxFileSize>${log.file.max.size}</maxFileSize>
            <!-- 配置总日志大小的最大值 -->
            <totalSizeCap>${log.file.total.max.size}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>



    <!-- 日志级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL -->
    <root level="info">
        <!-- 控制台日志 -->
        <appender-ref ref="console" />
        <!-- 按级别输出到对应文件 -->
        <appender-ref ref="debug" />
        <appender-ref ref="info"/>
        <appender-ref ref="warn"/>
        <appender-ref ref="error" />
    </root>

</configuration>

配置 application.yml

spring:
  profiles:
    active: dev
logging:
 path: D:/demolog # 设置日志储存位置
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 日志功能需求
  • 日志的门面: SLF4J
  • 自定义配置: LogBack
  • LogBack 特点
    • 配置 logback-spring.xml
      • 配置 application.yml
      相关产品与服务
      文件存储
      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档