【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日志并进行多维度分析。
目录
相关文章
|
7天前
|
运维 Java 关系型数据库
【Java笔记+踩坑】SpringBoot基础2——运维实用
SpringBoot程序的打包与运行、临时配置、多环境配置、日志
【Java笔记+踩坑】SpringBoot基础2——运维实用
|
10天前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
49 1
|
30天前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
1月前
|
存储 运维 监控
监控与日志管理:保障系统稳定运行与高效运维的基石
【8月更文挑战第16天】监控与日志管理是保障系统稳定运行和高效运维的基石。它们不仅能够帮助企业及时发现并解决问题,还能够为性能调优、资源优化和业务决策提供有力支持。因此,在构建系统架构时,企业应高度重视监控与日志管理的规划和实施,确保它们能够充分发挥作用,为企业的发展保驾护航。同时,随着技术的不断进步和应用场景的不断拓展,监控与日志管理也将持续演进和创新,为企业带来更多的价值和便利。
|
1月前
|
运维 分布式计算 DataWorks
DataWorks产品使用合集之运维中心中的运行日志可以保留多久
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
19天前
|
运维 监控 数据可视化
自动化运维:使用Python脚本进行日志分析
【8月更文挑战第31天】当系统出现问题时,我们通常会查看日志寻找线索。然而,手动阅读大量日志既费时又易出错。本文将介绍如何使用Python脚本自动分析日志,快速定位问题,提高运维效率。我们将从简单的日志读取开始,逐步深入到复杂的正则表达式匹配和错误统计,最后实现一个自动化的日志监控系统。无论你是新手还是老手,这篇文章都将为你提供有价值的参考。让我们一起探索如何用代码解放双手,让运维工作变得更加轻松吧!
|
25天前
|
监控 Java Serverless
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
|
26天前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
1月前
|
数据采集 SQL 运维
DataWorks产品使用合集之运维中心的详细日志是一直wait,是什么原因
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
26天前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)