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.rhkb.cn/news/268515.html

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

相关文章

redis运维

1.备份redis配置文件 cp /etc/redis.conf /etc/redis.conf.bak 2.将redis中不要的注释和空行删除 sed -i /^#/d; /^$/d /etc/redis.conf 3.redis配置文件 bing 0.0.0.0 :绑定本机所有网卡 daemonize yes:设置后台运行 requirepass redispwd…

【本科组冠名奖】2023年第八届数维杯数学建模挑战赛获奖感言

美国大学生数学建模竞赛已结束过半,现在又迎来了2024年第九届数维杯国赛,准备参加今年数维杯国赛的同学,今天我们一起看看去年优秀的选手都有什么获奖感言吧~希望能帮到更多热爱数学建模的同学。据说文末在看点赞的大佬都会直冲国奖呢&#x…

C++ //练习 10.31 修改前一题的程序,使其只打印不重复的元素。你的程序应使用unique_copy(参见10.4.1节,第359页)。

C Primer(第5版) 练习 10.31 练习 10.31 修改前一题的程序,使其只打印不重复的元素。你的程序应使用unique_copy(参见10.4.1节,第359页)。 环境:Linux Ubuntu(云服务器&#xff09…

STM32 (1)

1.基本信息 stm32是由ST公司生产的一种32位微控制器(单片机)。 1.1 各种型号 stm32是32位单片机的总称,有多种不同的系列。 32即用32个比特位表示一个地址,寻址范围:0x00000000 --0xffffffff (4GB) 1.2 存储密度 …

设计模式(十五)状态模式

请直接看原文:设计模式系列 ------------------------------------------------------------------------------------------------------------------------------- 前言 建议在阅读本文前先阅读设计模式(十一)策略模式这篇文章,虽说状态…

阿里云2核4G服务器租用价格85元一年,30元3个月

阿里云2核4G服务器多少钱一年?2核4G服务器1个月费用多少?2核4G服务器30元3个月、85元一年,轻量应用服务器2核4G4M带宽165元一年,本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1云服务器,阿里云服务…

javaWebssh水利综合信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh水利综合信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCA…

Qt 简约美观的加载动画 第九季

这次和大家分享6个非常清爽的加载动画. &#x1f60a; 效果如下 &#x1f60a; 一共三个文件 , 可以直接编译运行的呢 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc, char *argv[]) …

【javascript】快速入门javascript

本文前言及说明 适合学过一门语言有一定基础的人看。 省略最初学习编程时的各种编程重复的基础知识。 javascript简介 编程语言&#xff08;主前端&#xff09; 用途&#xff1a;主web前后端&#xff0c;游戏&#xff0c;干别人网站 优点&#xff1a;速度快&#xff0c;浏…

用BIO实现tomcat

一、前言 本课程的难度较高&#xff0c;需要将Servlet原理和IO课程全部学完。 二、当前项目使用方式 (1).自定义servlet 自定义servlet需要实现WebServlet并且实现name和urlMapping 重启进行访问 http://localhost:8090/myServlet (2).自定义html 重启进行访问 http://loc…

【C++ 编程指南】

C 编程指南 ■ C环境安装■ C 基本语法■ 预定义宏■ # 和 ## 运算符■ C 引用■ C 命名空间■ 定义命名空间■ using 指令■ 嵌套的命名空间 ■ String类■ 类■ 类的static静态成员 ■ C 继承■ 继承类型 public、protected 或 private■ 访问控制和继承■ 多继承■ 数据抽象…

最新版阿里云Linux CentOS7 ecs-user用户安装Mysql8详细教程(超简单)

经过两天的踩坑后&#xff0c;终于成功安装&#xff0c;并找到了最快捷的安装方式。接下来就由我来给大家介绍不踩坑安装大法&#xff01; 一、下载Mysql 首先前往Mysql官网下载 MySQL官方下载地址 第一步&#xff0c;选择安装包&#xff0c;这是最关键的一步&#xff0c;选错安…

css样式元素的相对定位,绝对定位,固定定位等元素定位运用技巧详解

文章目录 1.相对定位 relative2.绝对定位 absolute3.固定定位4.display 转换元素5.float浮动6.float产生内容塌陷问题7.overflow CSS样式学习宝典&#xff0c;关注点赞加收藏&#xff0c;防止迷路哦 在CSS中关于定位的内容是&#xff1a;position:relative | absolute | static…

uniapp聊天记录本地存储(详细易懂)

目录 目录 1、通过websocket拿取数据 2、获取聊天数据 3、聊天信息存储 、更新 4、读取聊天记录 5、发送信息&#xff0c;信息获取 6、最终效果 1.聊天信息的存储格式 2、样式效果 写聊天项目&#xff0c;使用到了本地存储。需要把聊天信息保存在本地&#xff0c;实时获…

第105讲:Mycat垂直分表实战:从规划到解决问题的完整指南

文章目录 1.垂直分表的背景2.垂直分表案例实战2.1.垂直分表规划2.2.配置Mycat实现垂直分表2.3.重启Mycat2.4.在Mycat命令行中导入数据结构2.5.查看由Mycat分表后每个分片上存储的表2.6.Mycat垂直分表后可能遇到的问题2.7.垂直分表完成 1.垂直分表的背景 我们的商城系统数据库&…

软件测试项目实战,某购物车/测试点分析实战(详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 第一步&#xff1…

winform 输出运行设备的mac地址

winform定制一个代码段 输出运行设备的mac码此方法获取的是运行设备上的物理网卡的MAC地址&#xff0c;并不包括虚拟网卡或无线网卡的MAC地址。当设备具有多个网卡时&#xff0c;它只返回第一个正常运行的网卡的MAC地址。如果未找到任何网卡&#xff0c;则返回"未找到MAC地…

贪心(基础算法)--- 区间选点

905. 区间选点 思路 &#xff08;贪心&#xff09;O(nlogn) 根据右端点排序 将区间按右端点排序 遍历区间&#xff0c;如果当前区间左端点不包含在前一个区间中&#xff0c;则选取新区间&#xff0c;所选点个数加1&#xff0c;更新当前区间右端点。如果包含&#xff0c;则跳…

雅特力AT32L021首款低功耗MCU震撼登场

雅特力于2月28日正式发布AT32L021首款入门级低功耗MCU&#xff0c;搭配不同容量Flash、SRAM&#xff0c;提供7种封装类型共21个型号选择&#xff0c;最小封装面积仅3x3mm。为降低能耗&#xff0c;延长设备运作时间&#xff0c;AT32L021系列支持多种能耗模式和休眠模式&#xff…

韦东山嵌入式Liunx入门驱动开发五

文章目录 一、驱动程序基石1-1 休眠与唤醒1-2 POLL机制1-3 异步通知(1) 异步通知程序解析(2) 异步通知机制内核代码详解 1-4 阻塞与非阻塞1-5 定时器(1) 内核函数(2) 定时器时间单位 1-6 中断下半部 tasklet 本人学习完韦老师的视频&#xff0c;因此来复习巩固&#xff0c;写以…