打印日志(JAVA)

1、通过导入包的形式

java 复制代码
package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/log")
@RestController
public class rizhi {
    private static final Logger logger = LoggerFactory.getLogger(rizhi.class);
    @RequestMapping("/logg")
    public String logger(){
        logger.info("我是日志");
        return "success";
    }
}

2、slf4j是一个日志门面,并不是一个实现日志的框架,log4j是实现日志的框架(SLF4J不同于其他⽇志框架, 它不是⼀个真正的⽇志实现, ⽽是⼀个抽象层, 对⽇志框架制定的⼀种规范, 标准, 接⼝. 所有SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使用)

3、SLF4J是⻔⾯模式的典型应⽤,⻔⾯模式(Facade Pattern)⼜称为外观模式, 提供了⼀个统⼀的接⼝, ⽤来访问⼦系统中的⼀群接⼝. 其主要特征是定义了⼀个⾼层接⼝, 让⼦系统更容易使⽤

4、门面模式实现

(1)⽐如去医院看病,可能要去挂号, ⻔诊, 化验, 取药, 让患者或患者家属觉得很复杂, 如果有提供接待⼈员, 只让接待⼈员来处理, 就很⽅便

(2)回家, 我们会开各个屋的灯. 离开家时, 会关闭各个屋的灯如果家⾥设置⼀个总开关, 来控制整个屋的灯就会很⽅便.

5、门面模式的优点
(1)减少了系统的相互依赖. 实现了客⼾端与⼦系统的耦合关系, 这使得⼦系统的变化不会影响到调⽤它
的客⼾端;
(2)提⾼了灵活性, 简化了客⼾端对⼦系统的使⽤难度, 客⼾端⽆需关⼼⼦系统的具体实现⽅式, ⽽只需要和⻔⾯对象交互即可.
(3)提⾼了安全性. 可以灵活设定访问权限, 不在⻔⾯对象中开通⽅法, 就⽆法访问

6、不引入日志门面产生的问题
(1)不同⽇志框架的API接⼝和配置⽂件不同, 如果多个⽇志框架共存, 那么不得不维护多套配置⽂件(这
个配置⽂件是指⽤⼾⾃定义的配置⽂件).
(2)如果要更换⽇志框架, 应⽤程序将不得不修改代码, 并且修改过程中可能会存在⼀些代码冲突.
(3)如果引⼊的第三⽅框架, 使⽤了多套, 那就不得不维护多套配置

7、 日志级别的分类(由开发人员自己设定)
(1)⽇志的级别从⾼到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE
(2)FATAL: 致命信息,表⽰需要⽴即被处理的系统级错误.
(3)ERROR: 错误信息, 级别较⾼的错误⽇志信息, 但仍然不影响系统的继续运⾏.
(4)WARN: 警告信息, 不影响使⽤, 但需要注意的问题
(5)INFO: 普通信息, ⽤于记录应⽤程序正常运⾏时的⼀些信息, 例如系统启动完成、请求处理完成等.
(6)DEBUG: 调试信息, 需要调试时候的关键信息打印.
(7)TRACE: 追踪信息, ⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)
8、日志级别的使用

java 复制代码
@RequestMapping("/printLog")
public String printLog() {
 logger.trace("================= trace ===============");
 logger.debug("================= debug ===============");
 logger.info("================= info ===============");
 logger.warn("================= warn ===============");
 logger.error("================= error ===============");
 return "打印不同级别的⽇志" ;
}

我们发现只有三个显示出来了,因为出现fatal⽇志,表⽰服务已经出现了某种程度的不可⽤,⽇志的输出级别默认是 info级别, 所以只会打印⼤于等于此级别的⽇志, 也就是info, warn和error

9、设置显示什么日志(通过配置文件来完成),此时就可以将debug文件显示出来

(1)Properties配置

java 复制代码
logging.level.root: debug

(2)yml配置

java 复制代码
logging:
 level:
 root: debug

10、日志持久化显示(以上的⽇志都是输出在控制台上的, 然⽽在线上环境中, 我们需要把⽇志保存下来, 以便出现问题之后追溯问题. 把⽇志保存下来就叫持久化)

java 复制代码
logging:
 file:
   path: D:/temp
   name:logger/ioc.log

解释:如果我们path和name同时存在时候,我们的path会不生效,我们的name可以为他命名,此时命名为ioc.log,我们名字头面加了一个logger的意思时我们会把ioc.log文件存放在logger下面,如果没头面的logger我们就会默认把ioc.log放在我们的src文件下面

11、我们的yml配置都可以去spring文档里面找

12、文件分割(如果一个文件太大,就不方便我们观看)

java 复制代码
logging:
  logback:
    rollingpolicy:
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
      max-file-size: 2KB

(1)日志分割格式

${LOG_FILE}.%d{yyyy-MM-dd}.%i

(2)文件达到2KB就进行分割,划分出一个新的文件

max-file-size: 2KB

13、配置项说明

(1)%clr(表达式){颜⾊} 设置输⼊⽇志的颜⾊

(2)%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} ⽇期和时间--精确到毫秒

(3)%5p 显⽰⽇志级别ERROR,MARN,INFO,DEBUG,TRACE

(4)%t 线程名. %c 类的全限定名. %M method. %L 为⾏号. %thread 线程名称. %m 或者%msg 显⽰输出消息. %n 换⾏符

(5)%5 若字符⻓度⼩于5,则右边⽤空格填充. %-5 若字符⻓度⼩于5,则左边⽤空格填充. %.15 若字符⻓度超过15,截去多余字符. %15.15 若字符⻓度⼩于15,则右边⽤空格填充. 若字符⻓度超过15,截去多余字符

14、需要配置, 让idea⽀持控制台颜⾊显⽰

在这里添加配置项,让日志显示颜色配置项 -Dspring.output.ansi.enabled=ALWAYS

15、配置日志格式

(1)Properties配置

java 复制代码
logging.pattern.console='%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'

(2)yml配置

java 复制代码
logging:
 pattern:
 console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
 file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'

console:控制台日志

file:文件日志

16、更简单的日志打印方法(用@slf4j)lombok提供的 @Slf4j 会帮我们提供⼀个⽇志对象 log, 我们直接使⽤就可以

(1)引入依赖

java 复制代码
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <optional>true</optional>
</dependency>

(2)输出日志

java 复制代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogController {
 public void log(){
 log.info("--------------要输出⽇志的内容----------------");
 }
}

17、模板模式:定义了一些方法,一个流程,并不实现,创建一些子类来实现

相关推荐
酥饼~2 分钟前
html固定头和第一列简单例子
前端·javascript·html
老马啸西风2 分钟前
NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character
java
一只不会编程的猫5 分钟前
高德地图自定义折线矢量图形
前端·vue.js·vue
?333335 分钟前
CTFHub Web进阶-PHP-Bypass disable_function攻略
开发语言·安全·web安全·php
所以经济危机就是没有新技术拉动增长了6 分钟前
二、javascript的进阶知识
开发语言·javascript·ecmascript
m0_748250937 分钟前
html 通用错误页面
前端·html
来吧~16 分钟前
vue3使用video-player实现视频播放(可拖动视频窗口、调整大小)
前端·vue.js·音视频
Bubluu17 分钟前
浏览器点击视频裁剪当前帧,然后粘贴到页面
开发语言·javascript·音视频
Cosmoshhhyyy24 分钟前
LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
java·leetcode·哈希算法