嘉定网站设计开发,做消费信贷网站价格,采购需求发布平台,兰州新区网站建设前言#xff1a; 前文我们介绍了配置文件的原理还有如果切换配置文件的环境,个人觉得归纳为一手册#xff0c;要用的时候查一下就好了。不然记那么多挺麻烦的。。
1.日志
1、日志框架
老生常谈#xff0c;什么是日志#xff1b;我们平时用System.out.println(“xxxxxx”…前言 前文我们介绍了配置文件的原理还有如果切换配置文件的环境,个人觉得归纳为一手册要用的时候查一下就好了。不然记那么多挺麻烦的。。
1.日志
1、日志框架
老生常谈什么是日志我们平时用System.out.println(“xxxxxx”)将一下比较关键的数据在控制台后来接触了日志框架比较常用的就是Log4J了; 一般常用的框架有 JUL,JCL,JBOSS-LOGING,longbacklog4j,log4j2,slf4j等等
日志门面 日志的抽象层日志实现JCLJakarta Commons Logging SLF4jSimple Logging Facade for Java jboss-loggingLog4j JULjava.util.logging Log4j2 Logback
左边选一个门面抽象层、右边来选一个实现
日志门面 SLF4J
日志实现Logback SpringBoot选用的是SLF4J和logback
2、SLF4j使用
1、系统中使用SLF4j
我们开发的时候一般都是调用日志抽象里面的方法而不直接调用日志的实现类这样可扩展性更强 我们看看这张图我们知道了SLF4J是接口他有很多实现类这次我们的项目用的是logback如果我们想换成log4j怎么呢我们可以到通过一个中间的适配器来适配log4j
2、如何统一日志框架
我们知道每种框架都有自己的日志系统如果一个系统里面包含了SLF4Jlogback,Springcommons-logging,Hibernate(jboss-logging),Mybatis·····等等。如何统一日志记录让所有的日志都统一使用slf4j进行输出 我们来看看这张图一个应用面向了很多日志框架如果我们直接去掉这些依赖包的话系统肯定会报错的因为Spring本来底层会调用这些框架的API等。那怎么解决从图中可以看出采取了偷梁换柱的做法用另一个jar包代替了本来的jar包。比如logging代替后和slf4j完美契合就可以使用。 总结 1.先将以前的剔除 2.用中间包替换原有的日志框架 3.导入slf4j其他的实现
3、SpringBoot日志
说了这么多我们来看看SprinBoot的日志实现 导入场景 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-logging/artifactId/dependency我们可以看看依赖关系图 分析:1.我们可以看到SpringBoot底层使用slf4jlogback的方式进行日志记录2.其他日志会转换成slf4j3.可以从依赖中看到明显的替换包 4.要引用其他框架的时候记得 dependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdexclusionsexclusiongroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactId/exclusion/exclusions/dependencySpringBoot能自动适配所有的日志而且底层使用slf4jlogback的方式记录日志引入其他框架的时候只需要把这个框架依赖的日志框架排除掉即可
4、日志使用
1、默认配置
SpringBoot默认帮我们配置好了日志
测试
public class SpringBootLong4jApplicationTests {private Logger logger LoggerFactory.getLogger(SpringBootLong4jApplicationTests.class);Testpublic void contextLoads() {//日志的级别//由低到高 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#logging.path
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径
#logging.fileG:/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%nlogging.filelogging.pathExampleDescription(none)(none)只在控制台输出指定文件名(none)my.log输出日志到my.log文件(none)指定目录/var/log输出到指定目录的 spring.log 文件中
2、指定配置
给类路径下放上每个日志框架自己的配置文件即可SpringBoot就不使用他默认配置的了
Logging SystemCustomizationLogbacklogback-spring.xml, logback-spring.groovy, logback.xml or logback.groovyLog4j2log4j2-spring.xml or log4j2.xmlJDK (Java Util Logging)logging.properties
logback.xml直接就被日志框架识别了
logback-spring.xml日志框架就不直接加载日志的配置项由SpringBoot解析日志配置可以使用SpringBoot的高级Profile功能 使用形式
springProfile namestaging!-- configuration to be enabled when the staging profile is active --可以指定某段配置只在某个环境下生效
/springProfile测试
appender namestdout classch.qos.logback.core.ConsoleAppender!--日志输出格式%d表示日期时间%thread表示线程名%-5level级别从左显示5个字符宽度%logger{50} 表示logger名字最长50个字符否则按照句点分割。 %msg日志消息%n是换行符--layout classch.qos.logback.classic.PatternLayout
!--开发环境--springProfile namedevpattern%d{yyyy-MM-dd HH:mm:ss.SSS} ---- [%thread] --- %-5level %logger{50} - %msg%n/pattern/springProfile
!--非开发环境--springProfile name!devpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/pattern/springProfile/layout/appender直接运行就是非开发环境 切换到开发环境 或者在配置那里填写 --spring.profiles.activedev
结果: PS
如果使用logback.xml作为日志配置文件还要使用profile功能会有以下错误
no applicable action for [springProfile]