打印日志(JAVA)

avatar
作者
猴君
阅读量:0

 1、通过导入包的形式

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、日志级别的使用
@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配置

logging.level.root: debug

(2)yml配置

logging:  level:  root: debug

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

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、文件分割(如果一个文件太大,就不方便我们观看)

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配置

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

(2)yml配置

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)引入依赖

<dependency>  <groupId>org.projectlombok</groupId>  <artifactId>lombok</artifactId>  <optional>true</optional> </dependency>

(2)输出日志

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

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

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!