阿里服务器可以做多少个网站,ui设计师与前端开发怎么对接,营销策略,建立网站就是制作网页吗SpringBoot_日志 简介1、日志框架2、SLF4j使用1、如何在系统中使用SLF4j https://www.slf4j.org2、遗留问题 3、SpringBoot日志关系4、日志使用1、默认配置2、指定配置 5、切换日志框架拓展#xff1a;日志分组 简介
6 种日志级别
TRACE: designates finer-grained informat… SpringBoot_日志 简介1、日志框架2、SLF4j使用1、如何在系统中使用SLF4j https://www.slf4j.org2、遗留问题 3、SpringBoot日志关系4、日志使用1、默认配置2、指定配置 5、切换日志框架拓展日志分组 简介
6 种日志级别
TRACE: designates finer-grained informational events than the DEBUG.Since:1.2.12很低的日志级别一般不会使用。TRACE 一般跟踪的是函数的调用并且 TRACE 不应该含有变量参数而仅能提示函数的调用关系。
**DEBUG:**一般用于细粒度级别上对调试应用程序非常有帮助主要用于开发过程中打印一些运行信息。
INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息这个可以用于生产环境中输出程序运行的一些重要信息但是不能滥用避免打印过多的日志。
WARN 表示会出现潜在错误的情形有些信息不是错误信息但是也要给程序员一些提示。该级别表示程序会自动调整到正常的状态类似参数未传入使用了默认的参数仍符合程序员预期之内的情况。
ERROR 指出虽然发生错误事件但仍然不影响系统的继续运行。打印错误和异常信息如果不想输出太多的日志可以使用这个级别。一般在 WARN 之后的级别在打印错误时应该同时打印错误码。
FATAL 指出每个严重的错误事件将会导致应用程序的退出这个级别比较高重大错误程序无法恢复必须通过重启程序来解决。
1、日志框架
一个统一的接口层日志门面日志的一个抽象层
给项目中导入具体的日志实现就行了
市面上的日志框架
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…
日志门面 日志的抽象层日志实现JCLJakarta Commons Logging SLF4jSimple Logging Facade for Java jboss-loggingJULjava.util.logging、 Log4j2、 Logback
左边选一个门面抽象层、右边来选一个实现
Spring框架默认是用JCL
而SpringBoot选用 SLF4j和logback
2、SLF4j使用
1、如何在系统中使用SLF4j https://www.slf4j.org
以后开发的时候日志记录方法的调用不应该来直接调用日志的实现类而是调用日志抽象层里面的方法
给系统里面导入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);}
}该例子中log信息“Hello World”将以info级别输出。 每一个日志的实现框架都有自己的配置文件。使用slf4j以后配置文件还是做成日志实现框架自己本身的配置文件
2、遗留问题
springbootslf4jlogback、Springcommons-logging、Hibernatejboss-logging、MyBatis、xxxx
统一日志记录即使是别的框架和我一起统一使用slf4j进行输出
如何让系统中所有的日志都统一到slf4j
1、将系统中其他日志框架先排除出去
2、用中间包来替换原有的日志框架
3、我们导入slf4j其他的实现
3、SpringBoot日志关系
实际开发中我们不需要直接添加该依赖你会发现spring-boot-starter其中包含了 spring-boot-starter-logging该依赖内容就是 Spring Boot 默认的日志框架 LogbackSLF4J。而 spring-boot-starter-web 包含了spring-boot-starter所以我们只需要引入web组件即可。
如想显示引入 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-logging/artifactId/dependencySuppressWarnings(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();如果我们要引入其他框架一定要把这个框架的默认日志依赖移除掉
Spring框架用的是commons-logging dependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdexclusionsexclusiongroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactId/exclusion/exclusions/dependencySpringBoot能自动适配所有的日志而且底层使用slf4jlogback的方式记录日志引入其他框架的时候只需要把这个框架依赖的日志框架排除掉即可
4、日志使用 在类上加上Sl4j注可以直接使用logger对象不用手动创建logger 1、默认配置
SpringBoot默认帮我们配置好了日志 //记录器Logger logger LoggerFactory.getLogger(getClass());Testpublic void contextLoads() {//System.out.println();//日志的级别//由低到高 tracedebuginfowarnerror//可以调整输出的日志级别日志就只会在这个级别以以后的高级别生效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%nSpringBoot修改日志的默认配置按需配置
logging.level.com.atguigutrace# 不指定路径在当前项目下磁盘根路径生成springboot.log日志
logging.path/spring/log
# 可以用logging.file指定完整的路径两者同时使用时只有file生效
#logging.fileG:/springboot.loglogging.level.包名指定包下的日志级别
# 在控制台输出的日志的格式
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%n2、指定配置
上面的是简单配置下面介绍复杂的配置
给类路径下放上每个日志框架自己的配置文件即可SpringBoot就不使用他默认配置的了
Logging SystemCustomizationLogbacklogback-spring.xml, logback-spring.groovy, logback.xml or logback.groovyLog4j2log4j2-spring.xml or log4j2.xmlJDK (Java Util Logging)logging.properties
也可以使用自定义的名称比如logback-config.xml只需要在application.properties文件中使用logging.configclasspath:logback-config.xml指定即可。
logback-spring.xml官方推荐。日志框架就不直接加载日志的配置项由SpringBoot解析日志配置可以使用SpringBoot的高级Profile功能
springProfile namestaging!-- configuration to be enabled when the staging profile is active --可以指定某段配置只在某个环境下生效
/springProfileLogback基于三个主要类Logger, Appenders and Layouts记录器、附加器、布局
appender namestdout classch.qos.logback.core.ConsoleAppenderlayout classch.qos.logback.classic.PatternLayoutspringProfile namedevpattern%d{yyyy-MM-dd HH:mm:ss.SSS} ---- [%thread] --- %-5level %logger{50} - %msg%n/pattern/springProfilespringProfile name!devpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/pattern/springProfile/layout/appender如果使用logback.xml作为日志配置文件还要使用profile功能会有以下错误
no applicable action for [springProfile]
5、切换日志框架
可以按照slf4j的日志适配图进行相关的切换
slf4jlog4j的方式
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdexclusionsexclusionartifactIdlogback-classic/artifactIdgroupIdch.qos.logback/groupId/exclusionexclusionartifactIdlog4j-over-slf4j/artifactIdgroupIdorg.slf4j/groupId/exclusion/exclusions
/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactId
/dependency切换为log4j2 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdexclusionsexclusionartifactIdspring-boot-starter-logging/artifactIdgroupIdorg.springframework.boot/groupId/exclusion/exclusions/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-log4j2/artifactId
/dependency拓展日志分组
application.properties 中还可以配置日志分组。
日志分组能够把相关的 logger 放到一个组统一管理。
例如我们可以定义一个 tomcat 组
logging.group.tomcatorg.apache.catalina,org.apache.coyote, org.apache.tomcat 然后统一管理 tomcat 组中的所有 logger
logging.level.tomcatTRACE Spring Boot 中还预定义了两个日志分组 web 和 sql
不过在 application.properties 中只能实现对日志一些非常简单的配置如果想实现更加细粒度的日志配置那就需要使用日志实现的原生配置例如 Logback 的 classpath:logback.xmlLog4j 的 classpath:log4j.xml 等。如果这些日志配置文件存在于 classpath 下那么默认情况下Spring Boot 就会自动加载这些配置文件。