Spring 日志

在Java程序中的日志,想必我们已经不陌生了吧!对于控制台System.out.println();输出的每个程序都可以看作成日志!

但是,相比于真正意义上的日志还是有很大区别的!

上述每个红框框所标注的都是真正日志的组成数据! 包含有:时间日期(精确到毫秒),日志级别(ERROR, WARN, INFO, DEBUG, 或TRACE),进程ID,线程名,Logger名(通常使用源代码的类名),日志内容等各种数据!

但是,作为一个Java后端程序员,我们该如何自定义日志呢??

@RestController
public class LoggerController {@PostConstructpublic void print(){System.out.println("我是一个日志!");}
}

是上述的方法自定义日志吗??是??

其实不是!!上述代码的运行结果为:

显而易见,这并不是一个规范的日志数据!

日志数据打印!

那么,我们该如何规范的打印出自定义的日志数据呢?

@RestController
public class LoggerController {//首先创建一个日志对象//Logger来自于slf4j包!!private static Logger logger = LoggerFactory.getLogger(LoggerController.class);@PostConstructpublic void print(){System.out.println("我是一个日志!");//使用日志对象logger来打印日志logger.info("======我是一个由程序员自定义的日志数据======");}
}

上述代码的运行结果为:

看着是不是有模有样了呢??

值得注意的是:

但是,对于日志级别有好几种:

日志级别从高到底依次为:FATAL, ERROR, WARN, INFO, DEBUG, TRACE

FATAL:致命信息,表示需要立即被处理的系统级错误。

ERROR:错误信息,级别较高的错误日志信息,但仍然不影响系统的继续运行。

WARN:警告信息,不影响使用,但需要注意的问题

INFO:普通信息,用于记录应用程序正常运行时的一些信息,列如系统启动完成,请求处理完成等。

DEBUG:调试信息,需要调试时候的关键信息打印。

TRACE:追踪信息,比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使用DEBUG级别替代)。

那么,我们来试着打印不同级别的日志信息吧!


@RestController
public class LoggerController {//首先创建一个日志对象//Logger来自于slf4j包!!private static Logger logger = LoggerFactory.getLogger(LoggerController.class);@PostConstructpublic void print(){System.out.println("我是一个日志!");//使用日志对象logger来打印日志logger.info("======我是一个由程序员自定义的日志数据======");//fatal级别的日志不能被打印!(太严重了)程序已经崩溃logger.error("我是一个error级别的日志信息");logger.warn("我是一个warn级别的日志信息");logger.info("我是一个info级别的日志信息");logger.debug("我是一个debug级别的日志信息");logger.trace("我是一个trace级别的日志信息");}
}

在上述的几个日志级别中,fatal级别的日志不能被打印!(太严重了)程序已经崩溃!!

那么,我们来看一下程序的运行结果吧!!

但是,根据上述程序的运行结果,我们仅仅看出打印出来了:ERROR, WARN, INFO这三个级别的日志,那么,对于DEBUG ,TRACE级别的日志信息哪去了??其实IDEA程序默认的级别为INFO,比其严重的级别日志才可以正常打印,否则不给予打印!

那么,我们该如何处理这个问题呢?

这就需要我们在配置文件中自定义日志级别了!

#设置日志级别
logging:level:root: debug

值得注意的 是:root表示根目录,意思是项目中的所有日志级别都是debug!!

经过上述配置文件的配置以后,并重启程序,我们便可以看出:

另:由于将日志默认级别INFO更改为DEBUG,运行程序,导致在控制台输出很多数据……不用担心,这是我们之前Debug的数据!没啥用!!

 当然,上述仅截图部分!!尴尬!

同理,当我们设置日志级别为:trace

#设置日志级别
logging:level:root: trace

 值得注意的 是:root表示根目录,意思是项目中的所有日志级别都是trace!!

运行结果为:

当然,我们也可以分目录来设置日志的打印级别

#设置日志级别
logging:level:root: infocom:example:captcha: debug

重启程序,此时控制台的运行结果便显得干净整齐了不少!!

设置日志级别颜色,感觉很炫!感兴趣的铁质自行百度搜索,在此小编便不再傻瓜式讲解!!

日志持久化!

保存日志数据,如:保存在硬盘中。

设置文件存储:

#设置日志级别
logging:level:root: infocom:example:captcha: debugfile:name: aaa.log

运行程序,我们便可以发现:Idea中新增了一个aaa.log的文件

我们可以看到aaa.log文件存储的便是我们刚刚所生成的日志内容!!

当然,上述存储的日志内容并没有添加相对路径(绝对路径),因此生成的数据会保存在项目所在的文件内部!

我们也可以自定义路径来保存日志内容!
 

#设置日志级别
logging:level:root: infocom:example:captcha: debugfile:name: logger/controller.log

将其保存在logger文件夹下的controller.log文件中

当然,我们也可以使用path来进行设置!

二者了解其中一个即可!!

name的使用范围比较广!!靠谱!


当然,更简单的方法便是用@Slf4j这个注解!

连Logger对象都不用创建了,直接使用log即可!!


@Slf4j
@RestController
public class LoggerController {//首先创建一个日志对象//Logger来自于slf4j包!!//private static Logger logger = LoggerFactory.getLogger(LoggerController.class);@PostConstructpublic void print(){System.out.println("我是一个日志!");//使用日志对象logger来打印日志log.info("======我是一个由程序员自定义的日志数据======");//fatal级别的日志不能被打印!(太严重了)程序已经崩溃log.error("我是一个error级别的日志信息");log.warn("我是一个warn级别的日志信息");log.info("我是一个info级别的日志信息");log.debug("我是一个debug级别的日志信息");log.trace("我是一个trace级别的日志信息");}
}

而且代码的运行效果也是一样的!!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【UE 材质】制作加载图案

目录 效果 步骤 一、形成圆环 二、使圆环转起来 效果 步骤 一、形成圆环 新建一个材质,这里命名为“M_Loading” 打开“M_Loading”,设置混合模式为半透明,着色模型为无光照,勾选双面 下面开始先创建一个圆环,将…

[嵌入式系统-36]:龙芯1B 开发学习套件 -5- PMON常见命令

目录 0. 开机时按c键进入pmon模式 (自启动模式时) 1、帮助命令 h 2、显示设备信息 devls 3.重启:reboot 4、设置环境变量 set/unset 5.查询环境变量:env 6.网络设置相关命令: ①设置IP:ifconfig&am…

【大厂AI课学习笔记NO.62】模型的部署

我们历尽千辛万苦,总算要部署模型了。这个系列也写到62篇,不要着急,后面还有很多。 这周偷懒了,一天放出太多的文章,大家可能有些吃不消,从下周开始,本系列将正常更新。 这套大厂AI课&#xf…

Vue开发实例(十一)用户列表的实现与操作

用户列表的实现与操作 一、创建用户页面和路由二、表格优化1、表头自定义2、表格滚动3、加入数据索引4、利用插槽自定义显示 三、功能1、查询功能3、增加4、删除5、修改 一、创建用户页面和路由 创建用户页面 在 src/components/Main 下创建文件夹user,创建文件Us…

驾辰龙跨Llama持Wasm,玩转Yi模型迎新春

今年新年很特别,AI工具添光彩。今天就来感受下最新的AI神器天选组合“WasmEdgeYi-34B”,只要短短三步,为这个甲辰龙年带来一份九紫离火运的科技感。 环境准备 这次用的算力是OpenBayes提供的英伟达RTX_4090*1、24GB显存、20核CPU、80GB内存…

django的模板渲染中的【高级定制】:按数据下标id来提取数据

需求: 1:在一个页面中显示一张数据表的数据 2:不能使用遍历的方式 3:页面中的数据允许通过admin后台来进行修改 4:把一张数据表的某些内容渲染到[xxx.html]页面 5:如公司的新商品页面,已有固定的…

获取 Windows 通知中心弹窗通知内容(含工具汉化)

目录 前言 技术原理概述 测试代码和程序下载连接 本文出处链接:https://blog.csdn.net/qq_59075481/article/details/136440280。 前言 从 Windows 8.1 开始,Windows 通知现在以 Toast 而非 Balloon 形式显示( Bollon 通知其实现在是应用…

第二证券:富时罗素扩容 A股引入国际增量资金

日前,英国富时罗素指数公司(FTSE Russell,简称“富时罗素”)公布的全球股票指数(FTSE Global Equity Index Series)半年度指数检查陈述显现,将新调入A股76只、调出1只。此前,富时罗素…

【Git】深入理解 Git 分支合并操作:git merge dev 命令详解

深入理解 Git 合并操作:git merge dev 命令详解 摘要:本文将深入探讨 Git 中的合并操作,以及如何使用 git merge dev 命令将dev 分支的修改合并到当前分支(假设当前分支为main 分支)中。通过详细的解释和示意图&#x…

【Java项目介绍和界面搭建】拼图小游戏——键盘、鼠标事件

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

后端开发技术面试指南

工作10多年,每年都会帮组里面试一些新同学校招社招的都有,下面我就从一个面试官的视角来给大家拆解一下如何淡然应对后端开发技术面试。 1.一面多为电话面试 (1)问七问八 ①简历要注重内容,形式上不丑没有错别字即可。之前收到过一个工作5…

【计算机考研】408学到什么程度才能考130?

408考130要比考研数学考130难的多 我想大部分考过408的考生都是这么认为的。408的难点在于他涉及的范围太广了,首先如果你要备考408,你要准备四门课程,分别是数据结构,计算机组成原理,操作系统和计算机网络。 这四门…