Spring Boot 日志文件

前言

        本篇博客主要介绍自定义的日志打印、日志的级别高低、如何保存日志等等.....

一、日志是什么?日志有什么用?

日志就是我们控制台上输出的内容,控制台上的输出的信息就是日志信息,如下所示:

日志有什么用?

        日志最大的作用就是可以定位和发现问题;除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:

记录⽤户登录⽇志⽅便分析⽤户是正常登录还是恶意破解⽤户

记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。

记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。

以上就是⽇志的一些主要功能。

二、自定义日志打印

2.1、能否使用System.out.print来打印日志?

        前面我们说过,日志就是输出在控制台的信息,那么我们自定义日志打印是不是就是直接使用System.out.print来输出信息到控制台呢?我们先来看一下日志包含的各个信息,再来说是否可以直接使用System.out.print来输出。

日志的格式说明: 

        通过这个我们可以看出,打印的日志信息中,时间、打印日志所在的类、日志的具体信息,这些我们都可以在System.out.print中直接输出,但是日志的级别,我们是无法获取的,日志级别也是很重要的,可以在我们排查问题的时候,可以根据日志级别来更快的找到我们所要的信息的。

        还有一点很重要的是,System.out.print打印的信息无法持久化的保存。因此,我们使用System.out.print来打印日志是不合适的。

2.2、使用Logger对象打印日志

        首先我们要在程序中获取⽇志对象需要使⽤⽇志⼯⼚LoggerFactory。接着再通过日志对象打印日志。

需要注意的是:Logger 对象是属于 org.slf4j 包下的,不要导⼊错包。

接下来我们用代码来演示一下:

这里一定得选择slf4j这个包下的Logger类;

到了这里之后,这里会出现两个getLogger方法,这两个方法的区别在于:

一个是传入一个类对象,一个是直接传一个字符串;

传递这个的意义就在于在打印日志时,输出的类所在的位置,当我们传入的是一个字符串时,打印出来的效果就是我们自己设置的位置当我们传入当前类对象的时候,打印出来的效果就是这个类所在的具体位置,从包名到类名,十分详细。因此,这里建议传入一个类对象。

打印日志代码:

package com.example.bloglog.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {private static final Logger log = LoggerFactory.getLogger(TestController.class);@RequestMapping("/sayhi")public String sayHi(){log.trace("trace日志");log.debug("debug日志");log.info("info日志");log.warn("warn日志");log.error("error日志");return "hello";}
}

运行结果: 

        以上代码就是最基本的自定义日志打印的代码了,但是这里我们预计是输出五个日志都打印,但是这里只打印了后面的三个日志;这里就涉及到日志级别及日志级别的问题了。

三、日志级别 

日志总的来说:可以分为六个级别,分别是:

trace:微量,少许的意思,级别最低;

debug:需要调试时候的关键信息打印;

info:普通的打印信息(默认⽇志级别);

warn:警告,不影响使⽤,但需要注意的问题;

error:错误信息,级别较⾼的错误⽇志信息;

fatal:致命的,因为代码异常导致程序退出执⾏的事件。

日志级从高到底排序图: 

日志默认级别的设置:如下所示:只需要设置logging.level,root=xxx(设置日志级别)即可

        以下代码我们是设置了日志级别为trace,代表的就是trace及以上的日志就会输出,如果不设置的话,默认的日志级别就是info,只有大于等于info级别的日志才会输出。

四、日志持久化保存 

        我们在生产环境上的日志是需要保存下来的,因为一旦在生产环境下出现了什么问题,我们才可以通过日志来进行分析问题,进而才能更快更好的解决问题。

        日志的持久化保存我们需要设置的东西有两个,一个是日志文件的名称,一个是日志文件的保存位置。

4.1、使用logging.file.path设置日志路径

对于设置日志的保存位置及日志的名称,我们需要在配置文件中进行设置,设置的代码如下:

        使用logging.file.path设置来保存的路径,但是这个方法设置不了日志的文件名,只能设置日志保存的位置;运行之后产生的日志文件如下所示:默认的日志文件名就是spring.log

        

4.2、使用logging.file.name设置日志保存位置及名称 

        我们还可以使用logging.file.name来设置,使用这个方法设置我们不仅可以设置日志的保存位置,还可以设置日志名称。设置代码如下所示:

运行后产生的文件如下:这时候我们就可以设置日志名称和位置了

        当我们使用logging.file.name设置了日志文件名称之后,不设置保存路径,默认会保存到当前项目的路径下。如下所示:

4.3、能不能使用logging.file.path设置日志保存位置再使用logging.file.name来设置日志保存名称?

        答案是:不可以,因为当这两个属性一起出现时,会以logging.file.name为主,就不会再去看logging.file.path的设置了,如果这时候logging.file.name中没设置路径的话,就会直接保存到当前项目的路径下。如下所示:

4.4、关于 logging.file.path与logging.file.name的总结

对于logging.file.name和logging.file.path的使用我们只需要记住以下三点规则:

1.logging.file.path只能设置日志保存的位置,不能设置日志保存名称;

2.logging.file.name既可以设置日志保存位置+名称,但是不能单独设置日志保存的位置;

3.当logging.file.name和logging.file.path一起使用时,会以logging.file.name的设置为主,logging.file.path中的设置不生效。

        还有一个需要特别注意的就是:当我们只使用了logging.file.name并且只设置了日志的保存位置时,没有设置日志的名称时,即使这时候也使用logging.file.path设置路径了,日志都是不会保存的!!!如下所示:

五、使用Lombok更简单的打印日志

        我们前面的自定义日志输出,需要在每一个类中都去从日志工厂获取一个日志对象,而且在选择LoggerFactory的时候还需要特别注意,一不小心就会选错,选成其他包下面的,因此这还是比较麻烦的。这里我们就可以直接使用Lombok来获取日志对象,这样子不仅不容易出错,而且还更简单。代码如下所示:

至于如何在IDEA中安装使用Lombok,可以看这篇博客☞ Spring执行流程及Bean的作用域与生命周期_小白学编程~的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141181.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue2.0源码学习】生命周期篇-挂载阶段

文章目录 1. 前言2. 挂载阶段分析3. 总结 1. 前言 模板编译阶段完成之后,接下来就进入了挂载阶段,从官方文档给出的生命周期流程图中可以看到,挂载阶段所做的主要工作是创建Vue实例并用其替换el选项对应的DOM元素,同时还要开启对…

c语言基础知识+OS+数据结构

c语言: memory section: .bss: uninitialized or zero-initialized global and static variables .data: initialized global and static variables .text: Read only, code and const C语言编译流程: pre-compiler: …

在创业公司,我靠它续命 ...

不知不觉就在新公司工作了一周,没有想象中那么难受。创业公司里没有复杂的人际关系,也没有无聊的会议,更没有复杂的流程。每天上班第一件事就是开个小会,可能是站着开,也可能是连麦开。大家简单过一下前一天的进度&…

vue-cli创建项目、vue项目目录结(运行vue项目)、ES6导入导出语法、vue项目编写规范

vue-cli创建项目、vue项目目录结构、 ES6导入导出语法、vue项目编写规范 1 vue-cli创建项目 1.1 vue-cli 命令行创建项目 1.2 使用vue-cli-ui创建 2 vue项目目录结构 2.1 运行vue项目 2.2 vue项目的目录结构 3 es6导入导出语法 4 vue项目编写规范 4.1 修改项目 4.2 以后…

LabVIEW崩溃后所产生的错误日志文件的位置

LabVIEW崩溃后所产生的错误日志文件的位置 LabVIEW开发环境刚刚崩溃,请问我如何访问崩溃后自动生成的日志文件? LabVIEW崩溃后产生的转储文件位于何处? 代码导致了LabVIEW崩溃,请问哪些文件可以帮助NI技术支持了解具体原因&…

腾讯mini项目-【指标监控服务重构】2023-08-24

今日已办 Jeager 功能 监控分布式工作流程并排除故障识别性能瓶颈追踪根本原因分析服务依赖关系 部署 部署 Deployment — Jaeger documentation (jaegertracing.io) 支持 clickhouse jaegertracing/jaeger-clickhouse: Jaeger ClickHouse storage plugin implementation …

Python之列表

标题 列表什么是列表列表的创建列表的删除列表的访问 列表的常用方法append()、insert()、extend()pop()、remove()、clear()count()、index()list()、 filter()、 reduce()、lambda() 列表支持的运算加法运算符乘法运算符*成员测试运算符in 内置函数对列表的操作列表推导式列表…

Python 逢七拍手小游戏2.0

"""逢七拍手游戏介绍:逢七拍手游戏的规则是:从1开始顺序数数,数到有7,或者是7的倍数时,就拍一手。例如:7、14、17......70......知识点:1、循环语句for2、嵌套条件语句if/elif/e…

tensorrt获取输入输出

利用Netron打开onnx,右边名字: int input_index engine->getBindingIndex("inout1.1");int output_index engine->getBindingIndex("191");

010_第一代软件开发(二)

第一代软件开发(二) 文章目录 第一代软件开发(二)项目介绍界面布局功能完善快照功能获取可用串口播放按键提示音 关键字: Qt、 Qml、 QSerialPort、 QPixmap、 QSoundEffect 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML&#xff…

Java基础(一)——Hello World,8种数据类型,键盘录入

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

C++项目:仿muduo库实现高性能高并发服务器

文章目录 一、实现目标二、前置知识(一)HTTP服务器1.概念 (二)Reactor模型:1.概念2.分类(1)单Reactor单线程:单I/O多路复用业务处理。(2)单Reactor多线程&…

ElementUI之登陆+注册

一.什么是ElementUI 二.ElementUI完成用户注册登录界面搭建 使用命令npm install element-ui -S,添加Element-UI模块 导依赖 建立登录和注册页面 ​编辑 配置样式 编写登录页面(Login) 编写注册页面(reginter) …

Elasticsearch(Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合)

Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合 一、Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索。 1、Elasticsearch 搜索入门 …

三子棋小游戏(简单详细)

设计总体思路 实现游戏可以一直玩,先打印棋盘,玩家和电脑下棋,最后分出胜负。 如果编写较大的程序,我们可以分不同模块 例如这个三子棋,我们可以创建三个文件 分别为: game.h 函数的声明game.c 函数…

MySQL简介以及安装和部署(Linux)

MySQL简介 MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年,SUN又被Oracle以74亿美金收购。 目前MySQL被广泛地应用在Internet上的中小型网站中。由于体积小、速度快、总体拥有成本低&…

java微服务项目整合skywalking链路追踪框架

skywalking官网网址:Apache SkyWalking 目录 1、安装skywalking 2、微服务接入skywalking 3、skywalking数据持久化 1、安装skywalking 下载skywalking,本篇文章使用的skywalking版本是8.5.0 Index of /dist/skywalkinghttps://archive.apache.org/…

网站整站优化-网站整站优化工具

您是否曾为您的网站在搜索引擎中的排名而感到焦虑?是否苦苦思考如何提高流量、吸引更多用户? 什么是整站优化。简而言之,它是一项用于提升网站在搜索引擎中排名的策略和技巧。通过对网站的内容、结构、速度等方面进行优化,可以使…

腾讯mini项目-【指标监控服务重构】2023-08-27

今日已办 Docker Monitoring with cAdvisor, Prometheus and Grafana Docker Monitoring with cAdvisor, Prometheus and Grafana | by Mertcan Simsek | MediumMonitoring Docker container metrics using cAdvisor | Prometheus prometheus.yml global:scrape_interval: …

电子信息工程专业课复习知识点总结:(五)通信原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 第一章通信系统概述——通信系统的构成、各部分性质、性能指标1.通信系统的组成?2.通信系统的分类?3.调制、解调是什么?有什么用…