Java Spring日志

文章目录

Spring日志

  1. jar包和war包的区别:
    JAR包是Java类库 的归档文件,而WAR包是专门用于Web应用程序的归档文件。

  2. 热加载:写的代码,立即被加载进来,生效了

    热部署:如果代码发生了变动,就会重新部署

  3. 运行SpringBoot程序(不在idea上运行的情况)

    (1) 打jar包

    (2) 通过java -jar XXX.jar

    启动Java虚拟机,并运行一个打包好的、名为 XXX.jar 的Java应用程序

  4. 如果要修改application.properties或者是application.yml文件的名字,就需要指定配置文件,但是我们一般不会进行修改,如下:

日志的作用

日志就是数据

  1. 定位和发现问题
  2. 系统监控
    比如618的京东,就在监控屏上看数据的响应,10条请求,就有10条响应,10条数据,0条响应,就是有问题的
  3. 数据采集:例如大数据等
  4. 日志审计:系统收集采集到的数据,以达到安全监控、故障排查、合规性验证和运营优化的目的

观察日志

  1. Spring集成了日志框架
  2. 引用slf4里的包
  3. 使用框架打印日志:
java 复制代码
package com.example.ioc.demos.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;

@RestController
public class LoggerController {
    // 通过日志工厂拿到了日志
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
    // 初始化
    @PostConstruct
    public void print(){
        System.out.println("打印日志!");
        logger.info("++++++++++++++我是日志框架打印的日志++++++++++++++++");
    }
}

打印出来的日志内容:

这个类来自于我们写的类,使用工厂模式打印日志:

日志框架

  1. slf4j 并不是一个真实的日志实现,而是日志门面,具体实现是log4j I/2 ,logback等
    使用SLF4J门面就可以,不需要关注它的具体实现,降低了代码之间的耦合

    SLF4J是一个日志的门面,只需要知道门面的使用即可,不用了解它的日志实现,Spring主要使用的日志实现是logback
  2. 门面模式(外观模式)
    slf4j 是门面模式的典型的应用。
    门面模式(有称为外观模式),提供了一个统一的接口 ,用来访问子系统中的一群接口 。其主要特征是定义一个高层接口,让子系统更容易使用,不需要关注子系统中的实现和内容。

    举个例子:


面试问:什么是设计模式??

设计模式:就是解决问题的一种模式,如何设计解决问题(解决问题的套路就是模式)

  1. 门面模式的优点:

  2. 入引入日志门面存在的问题:

  3. 引入日志门面:

  4. 打印日志的类(通常是当前这个类 ):

日志的级别

  1. 日志的分类:
    出现FATAL就等于是公司破产了
  2. Spring默认的日志级别是 info,所以比info级别低的日志不打印出来

    也可以设置日志的级别,在配置文件中,就可以设置
java 复制代码
// 将最低日志级别设置为了debug,比debug高的日志可以打印出来,比debug
// 级别低的还是打印不出来
logging:
  level:
    root: debug

总结

  1. 日志的使用:

  2. 日志框架:

    举个门面模式的例子:

日志级别

  1. debug会打印较多日志,可以对日志进行分目录打印,减少打印的内容
  2. 设置颜色:
    日志不仅可以再控制台中,还可以在消息队列,文件中
    日志可以设置颜色,只能设置控制台的颜色,这不是日志的支持,而是idea的支持

(1) 启动类设置

(2) 添加VM options

java 复制代码
-Dspring.output.ansi.enabled=ALWAYS

日志的持久化

  1. 数据保存在数据库中,是一种持久化的方式,日志保存在文件中,也是一种持久化的方式

(1) 保存在文件中

java 复制代码
logging:
  level:
    root: info #设置Spring打印的级别,root表示所有(我自己的项目和Spring管理的)都是info权限
    com:
      example:
        ioc:
          demos: debug # 设置我们自己的项目的级别

  file:
    name: logger/ioc.log
#    path: logger1

如果没有加路径,默认是放在当前项目下

放在相对路径下:

SpringBoot的特点:约定大于配置

path只可以设置路径:

日志分割

  1. 如果日志非常大就不好读了,所以要对日志进行分割
java 复制代码
logging:
  # 日志分割
  logback:
    rollingpolicy:
      max-file-size: 1KB # 1KB就进行分割文件
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
      # 修改文件的命名格式
  1. 文件分割的要求:

修改日志的格式

  1. 修改控制台和文件的日志格式:
java 复制代码
# 控制台日志格式
logging.pattern.console
# 日志文件格式
logging.pattern.file

  # 修改日志格式
  pattern:
    console: '%d{ HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
    file: '%d{ HH:mm:ss.SSS} %c %M %L [%thread] %m%n'

控制台日志格式:

日志的简单写法

  1. 使用@Slf4j

  2. @Sl4j 是lombok工具包提供的
  3. @Slf4

总结

相关推荐
01漫游者4 分钟前
JavaScript函数与对象增强知识
开发语言·javascript·ecmascript
GottdesKrieges5 分钟前
OceanBase恢复常见问题
java·数据库·oceanbase
IGAn CTOU5 分钟前
Java高级开发进阶教程之系列
java·开发语言
leo825...9 分钟前
Claude Code Skills 清单(本地)
java·python·ai编程
csbysj202012 分钟前
SQL NULL 函数详解
开发语言
其实防守也摸鱼15 分钟前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学
NGSI vimp15 分钟前
Java进阶——如何查看Java字节码
java·开发语言
We་ct1 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
身如柳絮随风扬1 小时前
多数据源切换实战:从业务场景到3种实现方案全解析
java·分布式·微服务
skywalk81631 小时前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言