在Spring Boot中使用不同的日志

前言,本篇就是介绍在Java中使用相关的日志,适合初学者看,如果对这篇不感兴趣的可以移步了,本篇主要围绕我们Java中的几种日志类型,也说不上有多深入,算的上浅入浅出吧,如果你有一段时间的开发经验或者以及学过日志了,其实这篇文章对你并无太大用处。

说到日志,这玩意就很重要了,我们在实际开发中或者我们在做项目的时候,我们一般查找问题往日志查看,包括我们上线的项目,如果项目出现什么问题了,那我们第一件事情,就是下载项目运行日志,然后根据日志来判断程序在哪里出现了问题。目前Java中提供的日志有以下几种类型:

  • JDK Logging: JDK自带的日志框架,也是Java官方推荐的日志框架,可以通过java.util.logging包来使用。
  • Log4j:Apache开源的日志框架,提供了丰富的配置选项和灵活的日志输出方式,可以通过log4j包使用
  • Logback:Log4j的升级版,也是由Apache开源的日志框架,提供了更好的性能和更加丰富的功能,可以通过logback包来使用。
  • SLF4J:Simple Logging Facade for Java,是一个抽象层,可以在不同的日志框架之间进行切换,可以通过slf4j包来使用。

接下来我们将采用这些案例进行demo日志打印:

第一个引入相关依赖:

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version><scope>compile</scope></dependency>

配置了相关依赖之后,咱们来配置我们的相关配置文件:

#端口号
server.port=9091
#开启应用调试模式
debug=true
#debug展示包以下的记录的日志级别为debug
logging.level.com.miaow=debug# 而logging.logback.rollingpolicy是Logback日志框架的滚动策略配置
# clean-history-on-start表示是否在应用程序启动时清除历史日志文件,默认为false。
logging.logback.rollingpolicy.clean-history-on-start=false
# file-name-pattern表示日志文件名的格式,默认为%d{yyyy-MM-dd}/%i.log,其中%d{yyyy-MM-dd}表示按照日期划分日志文件,%i表示日志文件的序号。
logging.logback.rollingpolicy.file-name-pattern=
#max-history表示保留的历史日志文件的最大数量,默认为7。
logging.logback.rollingpolicy.max-history=7
# max-file-size表示单个日志文件的最大大小,默认为10MB。
logging.logback.rollingpolicy.max-file-size=10MB
# total-size-cap表示所有日志文件的总大小上限,默认为0B,表示没有上限。
logging.logback.rollingpolicy.total-size-cap=0B

需要注意的是,logging.logback.rollingpolicy是Logback的配置项,如果您使用的是其他日志框架,可能需要使用不同的配置项。

也可以:

logging:level:root: infocom.example: debugfile:name: myapp.logpath: /var/log/myapp/

上面的配置表示将根日志级别设置为info,将com.example包下的日志级别设置为debug,并将日志输出到/var/log/myapp/myapp.log文件中。

咱们创建四个类表示以上的四种日志方式:

import java.util.logging.Logger;/*** @date 2023年11月29日 14:52* @description*/
public class MyClass1 {private static final Logger LOGGER = Logger.getLogger(MyClass1.class.getName());public void myMethod() {LOGGER.info("============>JDK Logging<============");LOGGER.info("This is an info message");LOGGER.warning("This is a warning message");LOGGER.severe("This is a severe message");}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class MyClass3 {private static final Logger LOGGER = LoggerFactory.getLogger(MyClass3.class);public void myMethod() {LOGGER.info("================>Logback<================");LOGGER.info("This is an info message");LOGGER.warn("This is a warning message");LOGGER.error("This is an error message");}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class MyClass4 {private static final Logger LOGGER = LoggerFactory.getLogger(MyClass4.class);public void myMethod() {LOGGER.info("===============>SLF4J<=================");LOGGER.info("This is an info message");LOGGER.warn("This is a warning message");LOGGER.error("This is an error message");}
}
import org.apache.log4j.Logger;
/*** @date 2023年11月29日 14:53* @description*/
public class MyClass5 {private static final Logger LOGGER = Logger.getLogger(MyClass5.class);public void myMethod() {LOGGER.info("==============>Log4j<==================");LOGGER.info("This is an info message");LOGGER.warn("This is a warning message");LOGGER.error("This is an error message");}
}

然后我们在Spring Boot中启动类中配置:

@Slf4j
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);MyClass1 m1 = new MyClass1();MyClass5 m2 = new MyClass5();MyClass3 m3 = new MyClass3();MyClass4 m4 = new MyClass4();m1.myMethod();m2.myMethod();m3.myMethod();m4.myMethod();}
}

如果你到这一步就以为结束了?
你不妨启动一下项目,我们发现MyClass5好像没生效,并且控制台报错了:

log4j:WARN No appenders could be found for logger
(org.apache.ibatis.logging.LogFactory).

log4j:WARN Please initialize the log4j system properly. log4j:WARN See
http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

我们发现问题出在,我们需要在Resources目录下建立一个log4j.properties文件

# Global logging configuration 开发时候建议使用 debug
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

放上如上代码,在启动,ok,我们发现日志如下。

2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass1         : ============>JDK Logging<============
2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass1         : This is an info message
2023-11-29 15:27:02.250  WARN 26848 --- [           main] com.miaow.demo.MyClass1         : This is a warning message
2023-11-29 15:27:02.250 ERROR 26848 --- [           main] com.miaow.demo.MyClass1         : This is a severe messageINFO [main] - ==============>Log4j<==================INFO [main] - This is an info messageWARN [main] - This is a warning message
ERROR [main] - This is an error message
2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass3         : ================>Logback<================
2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass3         : This is an info message
2023-11-29 15:27:02.250  WARN 26848 --- [           main] com.miaow.demo.MyClass3         : This is a warning message
2023-11-29 15:27:02.250 ERROR 26848 --- [           main] com.miaow.demo.MyClass3         : This is an error message
2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass4         : ===============>SLF4J<=================
2023-11-29 15:27:02.250  INFO 26848 --- [           main] com.miaow.demo.MyClass4         : This is an info message
2023-11-29 15:27:02.250  WARN 26848 --- [           main] com.miaow.demo.MyClass4         : This is a warning message
2023-11-29 15:27:02.251 ERROR 26848 --- [           main] com.miaow.demo.MyClass4         : This is an error message

在Spring Boot中使用日志有以下几个好处:

  • 问题排查和调试:日志是开发和运维过程中非常重要的工具,它可以帮助我们追踪和定位应用程序中的问题。通过记录关键信息和异常堆栈跟踪,我们可以更快地定位和解决问题。

  • 运行时监控:日志可以提供应用程序的运行时监控信息,包括请求处理时间、数据库查询时间、方法执行时间等。这些信息可以帮助我们了解应用程序的性能状况,及时发现潜在的性能问题并进行优化。

  • 安全审计:日志可以记录应用程序的操作和事件,包括用户登录、权限验证、敏感数据访问等。这些日志可以用于安全审计,帮助我们追踪和分析系统的安全事件,及时发现异常行为和潜在的安全威胁。

  • 业务分析和统计通过日志记录关键业务操作和事件,我们可以进行业务分析和统计。例如,统计用户访问量、分析用户行为、跟踪业务流程等,这些信息可以帮助我们了解用户需求和行为,优化产品和服务。

  • 运维管理:日志可以帮助运维人员监控和管理应用程序的运行状态。通过日志,我们可以了解应用程序的运行情况、资源利用情况、错误和异常情况等,及时发现和解决问题,保证应用程序的稳定运行。

总之,使用日志可以提供丰富的运行时信息和统计数据,帮助我们更好地了解和管理应用程序。在开发和运维过程中,合理配置和利用日志可以提高开发效率、问题排查能力和系统稳定性。

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

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

相关文章

单片机_RTOS_架构

一. RTOS的概念 // 经典单片机程序 void main() {while (1){喂一口饭();回一个信息();} } ------------------------------------------------------ // RTOS程序 喂饭() {while (1){喂一口饭();} }回信息() {while (1){回一个信息();} }void main() {create_task(喂饭);cr…

OpenHarmony 4.0 Release 编译及报错

1、环境准备 安装下面这三东西&#xff0c;是为了下载 Harmony 源码 sudo apt install curl sudo apt install python3-pip sudo apt install git-lfs 安装下面这五个东西&#xff0c;是为了解决编译到最后报错(头铁不信的&#xff0c;你可以试试&#xff0c;等最后再安装) …

opencv常用函数表

函数名功能说明cv2.imread()读取图像文件cv2.imshow()显示图像窗口cv2.imwrite()保存图像文件cv2.cvtColor()颜色空间转换cv2.resize()图像缩放cv2.flip()图像翻转cv2.rectangle()绘制矩形cv2.circle()绘制圆形cv2.line()绘制直线cv2.putText()绘制文本cv2.bitwise_and()与操作…

【Hadoop】集群资源管理器 YARN

一、yarn 简介 Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.x 引入的分布式资源管理系统。主要用于解决 hadoop 1.x 架构中集群资源管理和数据计算耦合在一起&#xff0c;导致维护成本越来越高的问题。 yarn主要负责管理集群中的CPU和内存 用户可以将各种服…

linux 中断管理机制

中断的概念 中断是指在CPU正常运行期间&#xff0c;由于内外部事件或由程序预先安排的事件引起的 CPU 暂时停止正在运行的程序&#xff0c;转而为该内部或外部事件或预先安排的事件服务的程序中去&#xff0c;服务完毕后再返回去继续运行被暂时中断的程序。Linux中通常分为外部…

yolov1网络结构说明

文章目录 一. 网络结构二. 网络说明1. 网络的输入2. 网络的输出(1) 5 5表示:每个网格使用两个先验框进行预测。(2) “5”表示&#xff1a;每个先验框包含的预测信息的数量。(3) 20表示&#xff1a;20个分类预测值(4) 每个网格能预测几个目标&#xff1f; 一. 网络结构 论文下…

在日常工作中怎么处理vue项目中的错误的?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue项目中的错误如何处理 目录 一、错误类型 二、如何处理 后端接口错误 代码逻辑问题 全局设…

各厂商服务器存储默认管理口登录信息(默认IP、用户名、密码)收集汇总

一、服务器IPMI管理信息 服务器IPMI管理信息 设备类型 设备型号 默认管理IP 默认用户名 默认密码 华为服务器 E6000 10.10.1.101-10.10.1.110 root Huawei12#$ RH2288 v3系列 192.168.2.100 root Huawei12#$ RH2288 v5系列 192.168.2.100 Administrator Admin@9000 T6000 10.10…

Elasticsearch 快照如何工作?

作者&#xff1a;Lutf ur Rehman Elastic 提供许多由讲师指导的面对面和虚拟现场培训以及点播培训。 我们的旗舰课程是 Elasticsearch 工程师、Kibana 数据分析和 Elastic 可观测性工程师。 所有这些课程都会获得认证。有关这些课程的详细介绍&#xff0c;请参考我之前的文章 “…

知识蒸馏相关基础知识

知识蒸馏 前置知识 Loss 现在分数-正确分数1 例&#xff1a; 正则化 Regularization 用来防止过拟合 知识蒸馏相关 softmax 把分数转换为概率的一种方法&#xff0c;e的次方 hard targets 和 soft targets 蒸馏温度 T 在原来的softmax下&#xff0c;除以某个系数&am…

Sublime text 添加到鼠标右键菜单,脚本实现

Sublime text 添加到鼠标右键菜单 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\SublimeText] "Open with Sublime Text" "Icon""D:\\Program Files\\Sublime Text\\sublime_text.exe,0" [HKEY_CLASSES_ROOT\*\shell\Subl…

HTTP采用的SSL/TLS标准如何保证通信的安全性?

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是在HTTP基础上添加了SSL/TLS加密层的安全版本。它使用SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff08;Transport Layer Security&#xff09;协议对数据进行加密传输&#xff0c;确保数据…

win10下安装 Anaconda + Cuda + Cudnn + Pycharm + Pytorch

1.安装Anaconda &#xff08;1-1&#xff09;下载Ananconda, Anaconda官网 选择windows版本&#xff1b; &#xff08;1-2&#xff09;安装Anaconda,一般选择【Just Me】 &#xff08;1-3&#xff09;建议不要装在C盘&#xff0c;后期多环境的python环境和各种库文件会占用很多…

Docker的基本概念和优势,以及在应用程序开发中的实际应用

文章目录 概要 基本概念 容器 (Container): 镜像 (Image): Dockerfile: 仓库 (Repository): 容器编排 (Orchestration): Docker Compose: Docker Daemon 和 Docker Client: 网络 (Network): 数据卷 (Volume): 主要优势 应用场景 小结 概要 Docker 是一种容器化平台&#xff0c;…

ruoyi-vue 整合EMQX接收MQTT协议数据

EMQX安装完成后&#xff0c;需要搭建客户端进行接收数据进一步对数据处理&#xff0c;下面介绍基于若依分离版开源框架来整合EMQX方法。 1.application.yml 添加代码 mqtt:hostUrl: tcp://localhost:1883username: devpassword: devclient-id: MQTT-CLIENT-DEVcleanSession: …

【物联网与大数据应用】Hadoop数据处理

Hadoop是目前最成熟的大数据处理技术。Hadoop利用分而治之的思想为大数据提供了一整套解决方案&#xff0c;如分布式文件系统HDFS、分布式计算框架MapReduce、NoSQL数据库HBase、数据仓库工具Hive等。 Hadoop的两个核心解决了数据存储问题&#xff08;HDFS分布式文件系统&#…

mysql5.7生成SSL证书

1、创建 CA 私钥和 CA 证书 &#xff08;1&#xff09;下载并安装openssl,将bin目录配置到环境变量&#xff1b; &#xff08;2&#xff09;设置openssl.cfg路径&#xff08;若不设置会报错&#xff0c;找不到openssl配置文件&#xff09; set OPENSSL_CONFG:\Program Files\…

nexus 制品库管理

目录 一、nexus 介绍 二、nexus 支持的仓库 三、nexus 部署 四、nexus 数据备份 五、创建一个内网yum源 六、创建一个代理yum仓库 七、jenkins 使用 nexus插件 7.1 jenkins 安装插件 7.2 配置 maven 工程 7.3 查看构建和上传 一、nexus 介绍 Nexus 是一个强大的仓库管…

在氮化镓和AlGaN上的湿式数字蚀刻

引言 由于其独特的材料特性&#xff0c;III族氮化物半导体广泛应用于电力、高频电子和固态照明等领域。加热的四甲基氢氧化铵(TMAH)和KOH3处理的取向相关蚀刻已经被用于去除III族氮化物材料中干法蚀刻引起的损伤&#xff0c;并缩小垂直结构。 不幸的是&#xff0c;由于化学蚀…

基于协同过滤算法的职业发展推荐系统设计

点我完整下载&#xff1a;基于协同过滤算法的职业发展推荐系统设计 基于协同过滤算法的职业发展推荐系统设计 Design of Career Development Recommendation System Based on Collaborative Filtering Algorithm 目录 目录 2 摘要 3 关键词 3 第一章 引言 3 1.1 研究背景 3 1.2…