SpringBoot 系列之使用切换 log4j 日志框架
ok, 在 pom 文件右键 ->Diagrams->show Dependencies...., 如图, 找到 spring-boot-starter-logging, 可以看到 SpringBoot 的日志实现默认依赖与 logback,ok, 如果你对这些知识不是很理解的, 建议先看我 Springboot 专栏的日志系列博客: https://smilenicky.blog.csdn.net/category_9195353.html
本博客要实现的是切换默认日志框架为 log4j, 当然是不建议这样做的, 因为 log4j 有性能问题, 所以其作者才开发了 logback, 不过作为学习的话, 还是可以学一下怎么切换 Springboot 默认的日志框架
先去 slf4j 官网拿一张图: 图示, 切换日志框架, 为了避免冲突, 一般都是先排除日志框架的实现 jar, 然后再将之前博客提到的偷梁换柱 jar, 比如 log4j-to-slf4j.jar 等等先排除, 然后再引入对应的日志实现 jar, 如图所示的 slf4j-log4j12.jar, 因为本博客并非入门教程, 所以学习之前请先参考我之前 Springboot 日志方面的博客, 再来学习
在这里插入图片描述
ok, 基于 slf4j 官方提供的知识, 我们就可以实践了, 首先选中 logback-classic.jar(logback 实现 jar),log4j-to-slf4j.jar(将 log4j API 强制切换回 slf4j 的偷梁换柱 jar), 然后右键, 选择 exclusion
在这里插入图片描述
ok, 再次打开 pom 文件, 可以看到 idea 自动帮我们 exclusion 一些 jar 了
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- <exclusions>
- <exclusion>
- <artifactId>logback-classic</artifactId>
- <groupId>ch.qos.logback</groupId>
- </exclusion>
- <exclusion>
- <artifactId>log4j-to-slf4j</artifactId>
- <groupId>org.apache.logging.log4j</groupId>
- </exclusion>
- </exclusions>
- </dependency>
ok, 避免日志冲突, exclusion 了 logback 的实现 jar 和偷梁换柱的 log4j-to-slf4j 之后, 我们还需要引入 log4j 的实现 jar
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- </dependency>
ok, 这是 slf4j 官网的说法, 但是我发现在一些旧的版本 SpringBoot 是有提供 spring-boot-starter-log4j 这个场景启动器的, 所以我们可以更简便的做 log4j 引入
直接 exclusion spring-boot-starter-logging:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-Web</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
然后直接引入 log4j 的场景启动器, 建议加上版本, 因为有些版本并没有提供 log4j 配置, 本博客是换回 1.5.7 才支持的, 2.2.1 的版本仲裁都没提供对应版本的
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-log4j</artifactId>
- <version>1.3.8.RELEASE</version>
- </dependency>
ok, 然后在 resources 直接丢 log4j.properties
- # LOG4J rootCategory config
- log4j.rootCategory=INFO, stdout, file
- # LOG4J console config
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d{
- yyyy-MM-dd HH:mm:ss
- } %5p %c{
- 1
- }:%L - %m%n
- # root 日志输出
- log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.file.file=logs/springboot.log
- log4j.appender.file.DatePattern='.'yyyy-MM-dd
- log4j.appender.file.layout=org.apache.log4j.PatternLayout
- log4j.appender.file.layout.ConversionPattern=%d{
- yyyy-MM-dd HH:mm:ss
- } %5p %c{
- 1
- }:%L - %m%n
启动 SpringBoot 日志:
在这里插入图片描述
来源: http://www.jianshu.com/p/ff58f056cdd6