
目录一. 打印日志的常见三种方法1.1 手动创建 Logger 对象基于SLF4J API1.2 使用 Lombok 插件的 Slf4j 注解1.3 使用 Spring 的 Log 接口使用频率较低二. 常见的 Loggerloggerlog是有什么关系吗三. 日志的级别和推荐级别一. 打印日志的常见三种方法1.1 手动创建 Logger 对象基于SLF4J API第一种方法就是手动创建 logger 日志对象直接通过 LoggerFactory 日志工厂创建即可使用 Logger 类型来接收这里实例对象就叫 logger。SLF4J 是日志门面Facade它提供统一的日志接口不直接实现日志功能。核心类org.slf4j.Logger是 SLF4J 的核心接口通过LoggerFactory.getLogger()创建实例。打印日志也可以单个或多个参数具体实例如下图注意每个{}对应一个参数即可并且参数顺序要对的上。import com.markerhub.entity.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.time.LocalDateTime; public class MyClass { // 通过 LoggerFactory 日志工厂创建日志对象 private static final Logger logger LoggerFactory.getLogger(MyClass.class); public static void main(String[] args) { // 用法一单个参数 logger 日志打印 String message abcde; logger.info(这是手动创建的 logger 对象打出的日志打印单个参数{}, message); // 用法二多个参数 logger 日志打印 int number 100; String message2 abcdefg; long time 1000000000000000000L; logger.info(这是手动创建的 logger 对象打出的日志打印多个参数{},{},{}, number, message2, time); // 用法三对象参数 logger 日志打印 User user1 new User(); user1.setUsername(zhangsna); user1.setPassword(123456); user1.setCreated(LocalDateTime.now()); user1.setEmail(123456qq.com); user1.setStatus(1); logger.info(这是手动创建的 logger 对象打出的日志打印对象参数{}, user1); logger.debug(debug 日志); logger.error(error 日志); } }运行程序如下控制台打印所示可以看出 info 就是普通的日志debug 是调试日志error 是错误日志。这里之所以有颜色区分是因为小编使用了插件插件名称Grep Console有需要的小伙伴可以搜索看下使用教程。1.2使用 Lombok 插件的 Slf4j 注解第二种方法最简单直接使用 Slf4j 注解但需要注意IDEA中需要安装了 Lombok 插件并且你的 spring boot 项目中引用了 lombok 依赖。Slf4j 是lombok插件提供的一个注解用于自动生成 SLF4J 的Logger实例减少样板代码。其底层还是通过第一种方式去新建的 logger 对象。dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency如下代码注解在类的头上添加 Slf4j 注解即可然后就可以在本类的任意位置直接显式调用 log 对象不需要再自行创建非常方便。import com.markerhub.entity.User; import lombok.extern.slf4j.Slf4j; import java.time.LocalDateTime; Slf4j public class MyClass { public static void main(String[] args) { // 用法一单个参数 logger 日志打印 String message abcde; log.info(这是 Slf4j 注解的 log 对象打出的日志打印单个参数{}, message); // 用法二多个参数 logger 日志打印 int number 100; String message2 abcdefg; long time 1000000000000000000L; log.info(这是 Slf4j 注解的 log 对象打出的日志打印多个参数{},{},{}, number, message2, time); // 用法三对象参数 logger 日志打印 User user1 new User(); user1.setUsername(zhangsna); user1.setPassword(123456); user1.setCreated(LocalDateTime.now()); user1.setEmail(123456qq.com); user1.setStatus(1); log.info(这是 Slf4j 注解的 log 对象打出的日志打印对象参数{}, user1); log.debug(debug 日志); log.error(error 日志); } }运行程序如下图和上面的 logger 对象效果是完全一样的。1.3使用 Spring 的 Log 接口使用频率较低如下代码所示Spring 自身提供了Log接口也可以创建日志对象。import com.markerhub.entity.User; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.time.LocalDateTime; public class MyClass { private static final Log logger LogFactory.getLog(MyClass.class); public static void main(String[] args) { // 用法一单个参数 logger 日志打印 String message abcde; logger.info(这是 Slf4j 注解的 log 对象打出的日志打印单个参数{},message); // 用法二多个参数 logger 日志打印 int number 100; String message2 abcdefg; long time 1000000000000000000L; logger.info(这是 Slf4j 注解的 log 对象打出的日志打印多个参数{},{},{}, number, message2, time); // 用法三对象参数 logger 日志打印 User user1 new User(); user1.setUsername(zhangsna); user1.setPassword(123456); user1.setCreated(LocalDateTime.now()); user1.setEmail(123456qq.com); user1.setStatus(1); logger.info(这是 Slf4j 注解的 log 对象打出的日志打印对象参数{}, user1); logger.debug(debug 日志); logger.error(error 日志); } }但是 Spring 提供的 logger 对象无法像前两种一样输出参数值这一点其实是不太友好的不过 Spring 提供的这种日志输出方式基本也没人使用同学们作为了解即可主要还是前两种用的比较多。二. 常见的 Loggerloggerlog是有什么关系吗1Logger 是SLF4J提供的日志接口用于创建日志对象如LoggerFactory.getLogger()。需要手动实例化。2log 是通过Slf4j注解生成的变量名本质还是一个Logger实例。3logger 没有特殊含义只是采用SLF4J提供的日志接口创建对象时常常见对象命名为 logger 而已。三. 日志的级别和推荐级别如以下表格所示日志的详细程度由高到低。一般情况下日志输出的详细越耗费系统性能所以不建议将日志输出特别详细适中即可大部分都是选择 INFO 级别也推荐大家尽量选择 INFO 或 DEBUG。级别严重性适用场景生产环境建议开发环境建议TRACE最低详细追踪程序执行流程关闭按需开启DEBUG低调试代码逻辑和变量状态关闭开启INFO中监控应用运行状态和关键操作开启开启WARN较高潜在问题不影响程序运行开启开启ERROR高功能错误需人工干预开启开启FATAL最高致命错误程序无法继续运行开启开启日志级别的设置基本在配置文件中设置的方式如下# 设置全局日志级别 logging.level.rootinfo # 设置特定包的日志级别 logging.level.com.example.myappdebug # 自定义日志输出格式和文件路径 logging.pattern.console%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n logging.file.nameapp.log