【5】SpringBoot日志存储路径和设置日志格式

article/2025/10/18 19:20:51

SpringBoot日志存储路径和设置日志格式

文章目录

    • SpringBoot日志存储路径和设置日志格式
      • 01、分析
      • 02、解决方案
      • 03、Springboot的日志的解决方案(掌握)
      • 04、查看springboot的日志的整个体系
      • 05、slf4j、logback和log4j三者的关系
      • 06、springboot的日志搭配
      • 07、日志级别(掌握)
      • 08、日志级别的修改(必须掌握)
      • 09、日志输出文件和日志格式(了解)
      • 10、日志的使用方式和注意事项(必须要掌握)
      • 11、lombok优化日志的定义(必须掌握)
      • 12、在开发中日志级别隔离(必须要掌握)
        • application-dev.yml
        • application.yml

01、分析

日志在开发过程中作用?

在开发过程这种,我们经常要调试和打印一些信息,这样的帮助和我辅助我们进行问题排查和数据的跟踪。

一般传统的方式是使用

System.out.printltn("xxxxx")

但是上面的这种方式存在如下问题:

1:仅仅只是一种控制台打印的方式。

2:不方便我后续生产环境的调试和查看。

3:性能角度,存在一定性能问题。会影响方法的执行速度。虽然影响很小,但是也不应该小觑。

02、解决方案

考虑:把打印的信息写入文件中。

也就所谓的日志

03、Springboot的日志的解决方案(掌握)

在springboot的底层日志结构中对应:spring-boot-starter-logging可以看出,它依赖了三个框架分别是:

spring-boot-starter-logging 依赖已经被

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

如下:
在这里插入图片描述

04、查看springboot的日志的整个体系

在这里插入图片描述

在springboot的底层日志结构中对应:spring-boot-starter-logging可以看出,它依赖了三个框架分别是:

  • slf4j
  • logback
  • log4j

05、slf4j、logback和log4j三者的关系

1、logback和log4j是日志实现框架,就是实现怎么记录日志的。

2、slf4j:提供了java所有的日志框架的简单抽象(使用了日志的门面设计模式),

说白了就是一个日志API(没有实现类), 它不能单独使用

必须要结logbacklog4j日志框架来实现结合使用。

06、springboot的日志搭配

springboot2.x以后默认采用了:slf4j+logback的日志搭配。
在开发过程中,我们可以采用slf4j的api去记录日志,底层的实现就是根据配置来决定使用logback还是log4j日志框架。

如:

package com.kuangstudy.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/*** @description:* @author: xuke* @time: 2021/6/1 19:58*/
@RestController
public class LogController {private static final Logger log = LoggerFactory.getLogger(LogController.class);@GetMapping("/log")public void console(){log.trace("----------trace--------");log.debug("----------debug--------");log.info("----------info--------");log.warn("----------warn--------");log.error("----------error--------");}
}

分析核心代码


// 初始化一个日志对象
private static Logger log = LoggerFactory.getLogger(IndexController.class);

上面打印的结果是:

2021-06-21 20:49:58.686(日志时间)  INFO(日志的级别) 16448(编号) --- [nio-9999-exec-1] (线程名称)c.kuangstudy.controller.IndexController(日志打印类) : ----------info--------(日志信息)
2021-06-21 20:49:58.686  WARN 16448 --- [nio-9999-exec-1] c.kuangstudy.controller.IndexController  : ----------warn--------
2021-06-21 20:49:58.686 ERROR 16448 --- [nio-9999-exec-1] c.kuangstudy.controller.IndexController  : ----------error--------

上面为什么仅仅打印了: info > warn > error 告诉你springboot默认日志级别是:info

07、日志级别(掌握)

 log.trace("----------trace--------");log.debug("----------debug--------");log.info("----------info--------");log.warn("----------warn--------");log.error("----------error--------");

顺序是:trace>debug>info>warn>error

小结:

springboot默认日志级别是:info

springboot2.x以后默认采用了:slf4j+logback的日志搭配。

日志级别:trace>debug>info>warn>error

08、日志级别的修改(必须掌握)

你要有认识,springboot,mybatis,hibernate这些框架都是采用日志管理他们的信息的打印。

整体修改:

#  指定日志级别 把springboot的所有日志修改成为debug
logging:level:root: debug

局部修改:

#  指定日志级别 把springboot的所有日志修改成为debug
logging:level:com:kuangstudy: debug

09、日志输出文件和日志格式(了解)

默认情况:springboot日志打印是在console(控制台中)。方便我们开发和查看。建议大家在开发的时候使用:debug日志,在生成环境中使用:error 。(为什么?)

日志输出文件:默认情况下关闭。

在开发中建议大家是打开,不打开也没有关闭,你可以项目发布制定日志输出的文件:(可以先不理会)

nohup java -jar xxxx.jar >>log.txt &

使用path的方式

server:port: 9999
logging:level:root: infofile:# 默认情况下:会在项目的根目录下生成/output/logs/spring.log,默认的日志名是:spring.logpath: output/logs# 如果不想把日志存放在logging.file.path目录下,可以采用name来重新定义存储的位置和日志文件的名称#name: d:/output/logs/console.logpattern:console: "%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger{50}- %msg%n"file: "%d{yyyy/MM/dd-HH:mm:ss} ---- [%thread] %-5level %logger{50}- %msg%n"

日志格式

%c 输出logger名称
%C 输出类名
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M或%method 输出所在方法名
%l 输出完整的错误位置, 包括类名、方法名、文件名、行数
%p 该条日志的优先级
%replace{pattern}{regex}{substitution} 将pattern的输出结果pattern按照正则表达式regex替换成substitution

一般来说不建议大家去修改,除非有特殊场景,比如后续我们秋招课程班中要讲的:elk 收集日志的时候,很方便的去定义格式

10、日志的使用方式和注意事项(必须要掌握)

日志的的使用

package com.kuangstudy.controller;import com.kuangstudy.entity.Course;
import com.kuangstudy.entity.User;
import com.kuangstudy.service.WeixinPayService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @description:* @author: xuke* @time: 2021/6/20 20:22*/
@RestController
public class IndexController {// 初始化一个日志对象private static Logger log = LoggerFactory.getLogger(IndexController.class);@Autowiredprivate WeixinPayService weixinPayService;@GetMapping("/index")public String test() {
//        weixinPayService.testvalue();weixinPayService.testvalue2();return "success";}/*** @return java.lang.String* @Author xuke* @Description 打印日志* @Date 20:54 2021/6/21* @Param []**/@GetMapping("/logs")public String consolelogs() {User user = new User();user.setId(1);Course course = new Course();course.setCourseid(100);course.setTitle("学相伴秋招课程班");course.setPrice("1999");weixinPayService.paycourse(user, course);return "success";}}

具体实现

package com.kuangstudy.service;import com.kuangstudy.config.WeixinPayProperties;
import com.kuangstudy.entity.Course;
import com.kuangstudy.entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;/*** @description:* @author: xuke* @time: 2021/6/20 21:18*/
@Service
public class WeixinPayService {private static Logger log = LoggerFactory.getLogger(WeixinPayService.class);@Autowiredprivate WeixinPayProperties weixinPayProperties;public void testvalue2() {System.out.println(weixinPayProperties.getAppid());System.out.println(weixinPayProperties.getApisecret());System.out.println(weixinPayProperties.getMcid());System.out.println(weixinPayProperties.getCallbackurl());}public void paycourse(User user, Course course) {try {System.out.println(1/0);log.info("当前支付的用户是:{},支付的课程是:{},金额是:{}", user.getId(), course.getTitle(), course.getPrice());log.info("支付的appid是:{},回调地址是:{}", weixinPayProperties.getAppid(), weixinPayProperties.getCallbackurl());} catch (Exception ex) {log.error("支付出异常,异常信息是:{}", ex.getMessage());}}
}

具体访问查看:

http://localhost:9999/logs

11、lombok优化日志的定义(必须掌握)

在lombok中提供了两个日志注解的支持:@Slf4j@Log4j2 建议在开发过程中就默认选择:@Slf4j

前提:必须要安装lombok的插件和依赖

 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version>
</dependency>
package com.kuangstudy.service;import com.kuangstudy.config.WeixinPayProperties;
import com.kuangstudy.entity.Course;
import com.kuangstudy.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;/*** @description:* @author: xuke* @time: 2021/6/20 21:18*/
@Service
@Slf4j // 相当于: private static Logger log = LoggerFactory.getLogger(WeixinPayService.class);
public class WeixinPayService {@Autowiredprivate WeixinPayProperties weixinPayProperties;public void testvalue2() {System.out.println(weixinPayProperties.getAppid());System.out.println(weixinPayProperties.getApisecret());System.out.println(weixinPayProperties.getMcid());System.out.println(weixinPayProperties.getCallbackurl());}public void paycourse(User user, Course course) {try {System.out.println(1/0);log.info("当前支付的用户是:{},支付的课程是:{},金额是:{}", user.getId(), course.getTitle(), course.getPrice());log.info("支付的appid是:{},回调地址是:{}", weixinPayProperties.getAppid(), weixinPayProperties.getCallbackurl());} catch (Exception ex) {log.error("支付出异常,异常信息是:{}", ex.getMessage());}}
}

查看编译以后的结果:

在这里插入图片描述

12、在开发中日志级别隔离(必须要掌握)

因为在开发中,我们分为生成环境和开发环境。开发环境的级别一般建议大家使用:debug或者info 。但是在生产环境中建议大家使用:error .所有我们可以使用起那么学习的环境隔离的机制,进行解决

application-dev.yml

开发环境:一般就在控制台打印即可,写文件着实没有任何意义。 日志级别是:debug

server:port: 9999#自定义属性
ksd:weixin:appid: 456453sdfsd52342mcid: 48878787callbackurl: https://www.kuangstudy.com/pay/callbackapisecret: SDFLKSDJFKLSJKLJ23423423#  指定日志级别 把springboot的所有日志修改成为debug
logging:level:root: debugpattern:# console是控制台的日志的格式console: "【KuangStudy-console】%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger{50} --%M- %msg%n"

####application-prod.yml

开发环境:一般就在控制台打印即可,写文件着实没有任何意义。 日志级别是:error

server:port: 80#  指定日志级别 把springboot的所有日志修改成为debug
logging:level:root: errorfile:# 如果不想把日志存放在logging.file.path目录下,可以采用name来重新定义存储的位置和日志文件的名称name: /www/logs/kuangstudypro.logpattern:# file 是指日志文件中日志的格式file: "【KuangStudy-file】%d{yyyy/MM/dd-HH:mm:ss} -- [%thread] %-5level %logger{50} -- %M - %msg%n"

日志输出文件:默认情况下关闭。

在开发中建议大家是打开,不打开也没有关闭,你可以项目发布制定日志输出的文件:(可以先不理会)

nohup java -jar xxxx.jar >>log.txt &

application.yml

# 环境激活
spring:profiles:active: dev

log学习方式:20分钟(建议复制粘贴)

1:基本使用

2:证明日志的优先级

3:使用lombok去优化日志定义

4:定义真实一点的日志输出规范,去明白占位符{}的含义。

5:了解一些日志输出

6:环境隔离

补充学习:

logback.xml

http://chatgpt.dhexx.cn/article/6J0cF36E.shtml

相关文章

nginx日志格式分析及修改

修改nginx日志打印格式 一. 打开终端&#xff0c;登录服务器并输入服务器密码 //ssh 用户名服务器ip ssh root192.168.0.132二. 切换到nginx目录 cd /var/log/nginx/三. 查看nginx日志 tail -f access.log日志说明&#xff1a; //默认的nginx标准日志格式 192.168.10.251 …

Nginx配置-日志格式配置

Nginx配置-日志格式配置 一、默认的日志格式二、我使用的日志格式三、参数四、测试效果 五一上线了一个小的预约程序&#xff0c;配置通过Nginx进行访问入口&#xff0c;默认的日志是没有请求时间的&#xff0c;因此需要配置一下&#xff0c;将每一次的请求的访问响应时间记录出…

Apache日志记录格式-LogFormat配置详解

Apache日志记录格式-LogFormat配置详解 前言 定制日志文件的格式涉及到三个指令&#xff0c;即LogFormat指令和CustomLog指令和ErrorLog指令&#xff0c;默认httpd.conf文件提供了关于这两个指令的几个示例。 格式设置 LogFormat LogFormat指令定义格式并为格式指定一个名…

springboot项目中日志使用----自定义日志格式(可直接使用)

springboot项目中日志使用 1、为什么加日志 1.1 日志是什么&#xff1f; 日志文件提供精确的系统记录&#xff0c;根据日志最终定位到错误详情和根源。日志的特点是&#xff0c;它描述一些离散的&#xff08;不连续的&#xff09;事件。例如&#xff1a;应用通过一个滚动的文…

python设置日志格式

# %(asctime)s 字符串形式的当前时间。 # %(levelname)s 文本形式的日志级别 # %(name)s Logger的名字 # %(filename)s 调用日志输出函数的模块的文件名 # %(funcName)s 调用日志输出函数的函数名 # %(lineno)d 调用日志输出函数的语句所在的代码行 # %(message)…

Log4j日志输出格式

Log4j日志输出格式 对于我才开始工作来说&#xff0c;输出日志唯一的目的就是打印代码的调试信息&#xff0c;当有项目运行什么问题或者错误可以通过查看日志快速的找到问题根源&#xff08;这也是我来公司最开始就遇到的问题&#xff09;。 先分享一个公司框架自带的通用日志…

logback 日志输出格式

强烈推荐一个大神的人工智能的教程&#xff1a;http://www.captainai.net/zhanghan​ 【前言】 日志对一个系统的重要性不言而喻&#xff1b;日志通常是在排查问题时给人看&#xff0c;一个友好的输出样式让人看到后赏心悦目&#xff0c;排查效率通常也会随之提高&#xff1b;…

Nginx的日志格式

vim /etc/logstash/conf.d/ filter模块的作用&#xff1a;过滤&#xff0c;{在一个大的真空管里面&#xff0c;中间有一个过滤网&#xff0c;只有比这个小的东西能过去&#xff0c;大的会拦住} 在grok中使用match进行选择&#xff0c;所传送过来的是下面这样。希望把他们变成i…

什么是日志文件

文章目录 什么是日志文件Centos 7 日志文件简易说明日志文件的重要性Linux常见的日志文件文件名/var/log/boot.log/var/log/cron/var/log/dmesg/var/log/lastlog/var/log/maillog或 /var/log/mail/*/var/log/messages/var/log/secure/var/log/wtmp、/var/log/faillog/var/log/h…

AE2018插件AfterCodecs v1.9.0安装教程,(AE mp4)

1.自己百度下载好 2.这2个文件夹要复制&#xff0c;其他可以不管 复制Autokroma AfterCodecs 文件夹到 C:\Program Files\Adobe\Common\Plug-ins\7.0\MediaCore 复制com.autokroma.afcpanel 文件夹到 Adobe After Effects CC 2018\Support Files\Plug-ins\Extensions&#x…

PS/PR/AE全套插件一键安装包无需注册码

注意事项&#xff1a; 1、下载前请关闭360、电脑管家等杀毒软件&#xff0c;否则会误报病毒导致无法安装&#xff1b; 2、安装PS/PR/AE插件合集前&#xff0c;请务必先安装好Adobe软件&#xff1b; 3、安装PS/PR/AE插件合集前&#xff0c;请务必关闭Adobe旗下所有软件。 安装步…

Ae 2020最新版下载地址 一键安装Windows

各类cc软件。 地址&#xff1a;https://www.yuque.com/docs/share/cf424323-49e5-43e6-a80c-4f07ce467d56 访问密码&#xff1a;关注公众号"糊糊省钱"&#xff0c;回复“ps”获取

Adobe After Effects(AE)2022软件安装[MAC]

Adobe After Effects简称“AE”&#xff0c;Adobe After Effects 2022mac是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室&#xff0c;属于层类型后期软件。Adobe…

AE CC2018/64位安装步骤及各种出现问题!!(真的装了好久)

最近爱上录vlog&#xff0c;但是作为一个计算机学院的学生我怎么仅仅局限于手机里的剪视频软件呢&#xff01;然后我打算学一下AE&#xff0c;但是在这个py的过程中&#xff0c;真的废了快一个晚上了&#xff0c;从第一次安装出现问题我就应该立马百度&#xff0c;但是我没有&a…

2023AE软件、Adobe After Effects安装下载教程

2023AE软件是一款由Adobe公司开发的视频编辑软件&#xff0c;也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用&#xff0c;用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式&#xff0c;具有丰富的插件和预设&#…

Adobe After Effect (AE) cc2020 安装教程【64位】

Adobe After Effects简称“AE” 是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。属于层类型后期软件。 ----介绍来源于百度 【软件名称】&#xff1a; After …

【AE2019】Adobe_After_Effects_2019软件下载及安装教程

下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1-foCrqbfKugK6cf7M4nevQ 提取码&#xff1a;6ewm 下载方式&#xff1a; 复制链接到浏览器中打开&#xff0c;输入提取码&#xff0c;保存到网盘&#xff0c;然后打开百度网盘&#xff08;PC端&#xff09;&a…

AE中文版 AE2021中文版下载 AfterEffects2021中文版ACR14.0最新下载和安装

AE我目前最为专业也是最火的特效制作工具&#xff0c;全称叫AfterEffects&#xff0c;现在最新的就是2021的&#xff0c;而且是中文&#xff0c;并且内置的ACR已更新到最新的14.0&#xff0c;非常适合新手朋友刚开始零基础入门学习使用&#xff0c;并且非常好上手&#xff0c;学…

After Effects 2021软件安装包

Ae 2021的全称是After Effects 2021&#xff0c;它是由Adobe公司研发推出的一款功能强大全面的视频制作软件&#xff0c;这款软件不仅仅可以帮助用户制作出各种精彩且有创意的动画、视频等作品&#xff0c;还可以凭借着自己的思维给视频作品添加文字、音乐、片头以及标题等&…

After Effects (AE)2021软件下载及安装教程。

**目录** 一、前言二、下载三、安装教程 一、前言 Adobe After Effects简称“AE”是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。属于层类型后期软件。 Adobe…