【SpringBoot2】运维实用篇-日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 日志大家不陌生,简单介绍一下,日志其实就是记录程序日常运行的信息,主要作用如下:编程期调试代码运营期记录信息记录日常运营重要信息(峰值流量、平均响应时长……)记录应用报错信息(错误堆栈)记录运维过程数据(扩容、宕机、报警……) 或许各位小伙伴并不习惯于使用日志,没关系,慢慢多用,习惯就好。

前言


日志大家不陌生,简单介绍一下,日志其实就是记录程序日常运行的信息,主要作用如下:

编程期调试代码

运营期记录信息

记录日常运营重要信息(峰值流量、平均响应时长……)

记录应用报错信息(错误堆栈)

记录运维过程数据(扩容、宕机、报警……)

或许各位小伙伴并不习惯于使用日志,没关系,慢慢多用,习惯就好。


1、代码中使用日志工具记录日志


日志的使用格式非常固定,直接上操作步骤:


步骤①:添加日志记录操作


@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
    private static final Logger log = LoggerFactory.getLogger(BookController.class);
    @GetMapping
    public String getById(){
        log.debug("debug...");
        log.info("info...");
        log.warn("warn...");
        log.error("error...");
        return "springboot is running...2";
    }
}


上述代码中log对象就是用来记录日志的对象,下面的log.debug,log.info这些操作就是写日志的API了。


步骤②:设置日志输出级别


日志设置好以后可以根据设置选择哪些参与记录。这里是根据日志的级别来设置的。日志的级别分为6种,分别是:


TRACE:运行堆栈信息,使用率低

DEBUG:程序员调试代码使用

INFO:记录运维过程数据

WARN:记录运维过程报警数据

ERROR:记录错误堆栈信息

FATAL:灾难信息,合并计入ERROR

一般情况下,开发时候使用DEBUG,上线后使用INFO,运维信息记录使用WARN即可。下面就设置一下日志级别:


# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true


这么设置太简单粗暴了,日志系统通常都提供了细粒度的控制


# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
  level:
      root: debug


还可以再设置更细粒度的控制


步骤③:设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别


logging:
  # 设置日志组
    group:
      # 自定义组名,设置当前组中所包含的包
        ebank: com.itheima.controller
    level:
      root: warn
        # 为对应组设置日志级别
        ebank: debug
      # 为对包设置日志级别
        com.itheima.controller: debug


说白了就是总体设置一下,每个包设置一下,如果感觉设置的麻烦,就先把包分个组,对组设置,没了,就这些。


总结

日志用于记录开发调试与运维过程消息

日志的级别共6种,通常使用4种即可,分别是DEBUG,INFO,WARN,ERROR

可以通过日志组或代码包的形式进行日志显示级别的控制


2、教你一招:优化日志对象创建代码

写代码的时候每个类都要写创建日志记录对象,这个可以优化一下,使用前面用过的lombok技术给我们提供的工具类即可。


@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
    private static final Logger log = LoggerFactory.getLogger(BookController.class);  //这一句可以不写了
}


导入lombok后使用注解搞定,日志对象名为log


@Slf4j  //这个注解替代了下面那一行
@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
    private static final Logger log = LoggerFactory.getLogger(BookController.class);  //这一句可以不写了
}


总结

基于lombok提供的@Slf4j注解为类快速添加日志对象


3、日志输出格式控制


日志已经能够记录了,但是目前记录的格式是SpringBoot给我们提供的,如果想自定义控制就需要自己设置了。先分析一下当前日志的记录格式。

image.png


对于单条日志信息来说,日期,触发位置,记录信息是最核心的信息。级别用于做筛选过滤,PID与线程名用于做精准分析。了解这些信息后就可以DIY日志格式了。本课程不做详细的研究,有兴趣的小伙伴可以学习相关的知识。下面给出课程中模拟的官方日志模板的书写格式,便于大家学习。


logging:
  pattern:
      console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"


总结

日志输出格式设置规则


4、日志文件


日志信息显示,记录已经控制住了,下面就要说一下日志的转存了。日志不能仅显示在控制台上,要把日志记录到文件中,方便后期维护查阅。


对于日志文件的使用存在各种各样的策略,例如每日记录,分类记录,报警后记录等。这里主要研究日志文件如何记录。


记录日志到文件中格式非常简单,设置日志文件名即可。


logging:
  file:
      name: server.log


虽然使用上述格式可以将日志记录下来了,但是面对线上的复杂情况,一个文件记录肯定是不能够满足运维要求的,通常会每天记录日志文件,同时为了便于维护,还要限制每个日志文件的大小。下面给出日志文件的常用配置方式:


logging:
  logback:
      rollingpolicy:
          max-file-size: 3KB
            file-name-pattern: server.%d{yyyy-MM-dd}.%i.log


以上格式是基于logback日志技术设置每日日志文件的设置格式,要求容量到达3KB以后就转存信息到第二个文件中。文件命名规则中的%d标识日期,%i是一个递增变量,用于区分日志文件。


总结

日志记录到文件

日志文件格式设置


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
8天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
43 5
|
3天前
|
存储 运维 监控
API明细日志及运维统计日志全面提升API可运维性
在数字化转型的大潮中,数据已成为企业最宝贵的资产之一。而数据服务API可快速为数据应用提供数据接口。面对越来越多的API以及越来越多的应用调用,如何快速查看API的服务情况、异常情况及影响范围,以及查看API的调用详情,进行API的性能优化、错误排查变得越来越重要,本文将介绍如何配置和开通API运维统计及明细日志,以及如何查看日志进行介绍。
|
16天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
32 1
|
1月前
|
Java Maven Spring
SpringBoot日志整合
SpringBoot日志整合
19 2
|
1月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
127 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
30天前
|
运维 监控 数据可视化
出海运维日志通到底重要不重要?
出海运维日志通到底重要不重要?
|
1月前
|
SQL XML 监控
SpringBoot框架日志详解
本文详细介绍了日志系统的重要性及其在不同环境下的配置方法。日志用于记录系统运行时的问题,确保服务的可靠性。文章解释了各种日志级别(如 info、warn、error 等)的作用,并介绍了常用的日志框架如 SLF4J 和 Logback。此外,还说明了如何在 SpringBoot 中配置日志输出路径及日志级别,包括控制台输出与文件输出的具体设置方法。通过这些配置,开发者能够更好地管理和调试应用程序。
|
2月前
|
运维 Java 关系型数据库
【Java笔记+踩坑】SpringBoot基础2——运维实用
SpringBoot程序的打包与运行、临时配置、多环境配置、日志
【Java笔记+踩坑】SpringBoot基础2——运维实用
|
2月前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
225 1
|
3月前
|
运维 监控 数据可视化
自动化运维:使用Python脚本进行日志分析
【8月更文挑战第31天】当系统出现问题时,我们通常会查看日志寻找线索。然而,手动阅读大量日志既费时又易出错。本文将介绍如何使用Python脚本自动分析日志,快速定位问题,提高运维效率。我们将从简单的日志读取开始,逐步深入到复杂的正则表达式匹配和错误统计,最后实现一个自动化的日志监控系统。无论你是新手还是老手,这篇文章都将为你提供有价值的参考。让我们一起探索如何用代码解放双手,让运维工作变得更加轻松吧!