SprngBoot 日志框架

mac2024-08-13  63

SpringBoot日志

日志框架分类和选择

在开发中, 总会将关键数据用System.out.println();打印在控制台上,来进行检查判断, 日志框架就是用来打印这个得,用来在控制台上或者新建个文档来储存显示 系统运行时信息 日志框架分为抽象层 和实现层, 在市场上有很多日志框架 JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.... 日志门面 (日志的抽象层)日志实现JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-loggingLog4j JUL(java.util.logging) Log4j2 Logback SpringBoot:底层是Spring框架,Spring框架默认是用JCL;‘​ ==SpringBoot选用 SLF4j和logback;==

SLF4j 的使用

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类, 而是调用日志抽象层里面的方法; 给系统里面导入slf4j 的jar和 logback的实现jar import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } } 每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的 配置文件; 下图为 要引入日志框架需要导入的jar包图 例如: 导入 抽象层框架 slf4j 以及 实现层框架 logback 框架 需要导入 slf4j-api.jar logback-classic.jar logback-core.jar 因为这两个框架是一个人写的所有中间不需要连接包 而导入 slf4j 和 log4j 除了基础jar 包 外,还要导入一个 slf4j-log412.jar 的连接包 虽然这两个框架也是一个人写的 但 log4j 写出来的更早 没有考虑到后来的抽象层框架,所有需要连接

遗留问题

不同的框架使用的日志文件是不一定相同的,几个框架联合使用时我们需要统一框架, 所有我们再框架统一的时候需要导入其他框架,联合到我们需要使用的框架上,来使用; 如下图,SpringBoot中我们使用的是 slf4j ,所有我们在联合其他日志框架的时候 ,我们需要将 其他日志框架删除看,导入如: log4j-over-slf4j .jar 这类框架,来讲这些框架的功能转移到slf4j上

如何让系统中所有的日志都统一到slf4j; 1、将系统中其他日志框架先排除出去; 2、用中间包来替换原有的日志框架; 3、我们导入slf4j其他的实现

SpringBoot日志关系

SpringBoot使用它来做日志功能; <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> 在IDEA中 在 pom.xml文件中 右键--> Diagrams -->show Dependencies 图表显示mavn 继承关系 总结:​ 1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录​ 2)、SpringBoot也把其他的日志都替换成了slf4j;​ 3)、中间替换包?(打开mavn下载的包 找到那些中间替换包,你会发现中间替换包中的java文件与原日志框架相同, 但其中的代码块换成了SLF4j 的) @SuppressWarnings("rawtypes") public abstract class LogFactory { static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j"; static LogFactory logFactory = new SLF4JLogFactory();

4)、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉?​ 如: Spring框架用的是commons-logging; <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>

日志使用

在SpringBoot 默认配置好的日志框架 //记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public void contextLoads() { //System.out.println(); //日志的级别; //由低到高 trace<debug<info<warn<error //可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效 logger.trace("这是trace日志..."); logger.debug("这是debug日志..."); //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别 logger.info("这是info日志..."); logger.warn("这是warn日志..."); logger.error("这是error日志..."); } 日志输出格式: %d表示日期时间, %thread表示线程名, %-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息, %n是换行符 --> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

SpringBoot修改日志的默认配置

在application.properties 中 #logging.path= // 不指定路径在当前项目下生成springboot.log日志 //可以指定完整的路径; #logging.file=G:/springboot.log // 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件 logging.path=/spring/log // 在控制台输出的日志的格式 logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n // 指定文件中日志输出的格式 logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
最新回复(0)