日志入门学习

简介: 日志入门学习

日志

@TOC

日志基础

日志作用

  • 编程器调试代码
  • 运营期记录信息

    • 记录日常运营重要信息(峰值流量、平均响应时长……)
    • 记录应用报错信息(错误堆栈)
    • 记录运维过程数据(扩容、宕机、报警……)

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

  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...";
        }
    }

    在这里插入图片描述

​ 运行后看控制台会发现一个问题,debug得日志没有出现,这是什么原因?其实是debug得优先级太低,而系统默认级别是info,所以想要看到debug日志还需要添加一些操作

  1. 设置日志输出级别

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

    • TRACE:运行堆栈信息,使用率低
    • DEBUG:程序员调试代码使用
    • INFO:记录运维过程数据
    • WARN:记录运维过程报警数据
    • ERROR:记录错误堆栈信息
    • FATAL:灾难信息,合并计入ERROR

    ​ 一般情况下,开发时候使用DEBUG,上线后使用INFO,运维信息记录使用WARN即可

    为了出现debug信息,可以在配置文件中添加如下信息

# debug 默认是不开启得,所以改成true就行了
debug: true

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

# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
  level:
  root: debug

root级别是整体应用,我们可以设置范围更小得地方实现日志

logging:
  level:
    root: info
    #设置某个包得日志级别
    com.example.controller: debug

​ 还可以对多个包设置日志级别,一个一个设置太麻烦了,可以将他们分到一个组里面,设置这个组就行了

# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
  #设置分组
  group:
    ebank: com.example.dao,com.example.controller
  level:
    root: info
    #设置某个包得日志级别
#    com.example.controller: debug
    #设置分株:对某个组设置日志级别
    ebank: warn

优化日志对象代码

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

  1. 导入lombok坐标
  2. controller添加@Slf4j注解
@Slf4j        //这个注解替代了下面那一行
@RestController
@RequestMapping("/books")
public class BookController{
//    private static final Logger log = LoggerFactory.getLogger(BookController.class);    //这一句可以不写了
}

日志输出格式控制

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

在这里插入图片描述

对于单条日志信息来说,日期,触发位置,记录信息是最核心的信息。级别用于做筛选过滤,PID与线程名用于做精准分析。

#设置日志格式
logging:
    pattern:
        console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"

日志文件

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

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

logging:
    file:
        name: server.log

​ 设置完后,需要取文件夹中打开找到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日志并进行多维度分析。
相关文章
|
4月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
114 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
4月前
|
存储 监控 Java
Spring6入门 + Log4j2
Spring6入门 + Log4j2
|
5月前
|
Kubernetes 容器
k8s学习-CKS真题-日志审计 log audit
k8s学习-CKS真题-日志审计 log audit
82 0
|
5月前
|
存储 缓存 关系型数据库
认真学习MySQL的事务日志-Redo日志
认真学习MySQL的事务日志-Redo日志
44 0
|
5月前
|
存储 监控 数据可视化
小白带你学习linux的ELK日志收集系统
小白带你学习linux的ELK日志收集系统
163 0
|
1月前
|
SQL 存储 关系型数据库
轻松入门MySQL:深入理解MySQL日志,二进制日志、中继日志、回滚日志和重做日志(19)
轻松入门MySQL:深入理解MySQL日志,二进制日志、中继日志、回滚日志和重做日志(19)
|
8月前
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
612 1
|
5月前
|
Kubernetes 监控 容器
k8s学习-CKA真题-监控Pod日志
k8s学习-CKA真题-监控Pod日志
78 0
|
7月前
|
Java 测试技术 Docker
Spring Boot 学习研究笔记(十九)-docker部署SpringBoot 日志目录挂载
Spring Boot 学习研究笔记(十九)-docker部署SpringBoot 日志目录挂载
272 0
|
5天前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志