springboot学习(六)springboot各版本中使⽤log4j2记录⽇志
spring boot 各版本中使⽤ log4j2 记录⽇志
前⾔
Spring Boot中默认⽇志⼯具是logback,只不过我不太喜欢logback。为了更好⽀持 spring boot 框架,我使⽤log4j。
spring boot 各版本与 log4j 的⽀持情况
1. spring boot 1.
2.X 版本
spring boot 1.2.X版本⼀般建议使⽤默认⽇志⼯具(logback),也可以使⽤ log4j。
但,注意的是:Spring Boot 1.2.4.RELEASE包含⼀个bug,。所以,当你通过application.properties定义⽇志级别时,该错误会更改⽗记录器级别,在最差情况下会更改根记录器级别。虽然这个bug是修复在1.2.6.RELEASE,我建议⾄少使⽤1.2.8.RELEASE(如果你想坚持1.2.x)。
因为 spring boot 现在仍然在快速发展阶段,版本更新较快,有时候就会因为版本问题⽽出现各种奇奇怪怪的bug。
springboot架构图2. spring boot 1.
3.X 版本
spring boot 从 1.3.X 版本开始⽀持slf4j+log4j/log4j2。
* ⾸先,先解决为什么使⽤ SL4J Facade?
对于这个问题,⽹上已经有许多精彩地点答案了,我就直接附上其中⼀篇的地址了:。
同时,附上⼀张⼯作流程图:
然后,就是在⾃⼰的 springboot 项⽬中使⽤ log4j。
补充⼀下,由于⽅法⼀样,我将slf4j+log4j2放到了1.4.X版本中来应⽤。
1.创建⼀个1.3.X版本的 spring boot 项⽬(记得排除logback-classic的依赖)。
1
2 3 4 5 6 7 8 9 10<dependency>
<groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>      </exclusion>
</exclusions>
</dependency>
2.引⼊ SL4J 依赖。1
2 3 4 5 6 7 8 9 10<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.19</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>  <artifactId>log4j-slf4j-impl</artifactId>
<version>2.5</version>
</dependency>
3.引⼊ LOG4J 依赖。1
2 3 4 5 6 7 8 9 10<dependency>
<groupId>org.apache.logging.log4j</groupId>  <artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>  <artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
10 11 12 13 14 15</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>  <artifactId>log4j-jcl</artifactId>
<version>2.5</version>
</dependency>
顺便解释⼀下,log4j-jcl⼯件是Apache Log4J Commons Logging Bridge。如果你打算将Spring Boot application.properties⽇志配置路由到Log4J⽂件追加器,那么它是必需的。
4.添加⼀个测试Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class LoggerController {
private final Logger logger = Class());    @RequestMapping("/mylog")
public String index(){
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
<("This is an error message");
return"success";
}
}
5.在src/main/resources⽬录下加⼊log4j.properties配置⽂件
这个,与 spring 框架下的 log4j.properties 通常配置⼀样,我就简单提供⼀个。1
2
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23#LOG4J配置
#设定root⽇志的输出级别为INFO,appender为控制台输出stdout,⽂件输出为file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p]-[%d{yyyy-MM-dd HH:mm:ss}]-[%c:%L]: %m%n #只打印级别为ERROR或以上的消息。
Module=FATAL
#对 st 包下的配置
st=DEBUG
lipse.jetty=WARN
log4j.logger.freemarker=WARN
hange=WARN
#⽂件输出配置
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p]-[%d{yyyy-MM-dd HH:mm:ss}]-[%c:%L]: %m%n
6.启动项⽬访问就可以在 log.log ⽂件与控制台中看到⽇志打印的信息。
3. spring boot 1.
4.X 版本
从 spring boot 1.4开始的版本就要⽤log4j2
1.将上⼀个项⽬中有关 log4j 与 slf4j 的有关依赖全部去掉,因为 springboot 已经帮我们集合好了。1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<!--去掉springboot本⾝⽇志依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>          </exclusion>
</exclusions>
</dependency>
<!--log4j2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2.添加 l ⽂件(与 application.properties 同级)。
1
2
34567891011121314151617181920212223242526272829
30
<?xml version="1.0" encoding="UTF-8"?><!--启动项设置为 trace ,加载 springboot 启动内部各种详细输出--><Configuration status="trace">
<Appenders>
<!--添加⼀个控制台追加器-->
<Console name="Console" target="SYSTEM_OUT" follow="true">            <PatternLayout>                <pattern>[%-5p] %d %c - %m%n</pattern>            </PatternLayout>
</Console>
<!--添加⼀个⽂本追加器,⽂件位于根⽬录下,名为log.log-->
<File name="File" fileName="log.log">
<PatternLayout>                <pattern>[%-5p] %d %c - %m%n</pattern>            </PatternLayout>        </File>
</Appenders>
<Loggers>        <Logger name="com.github" level="debug" />        <!--记录 qg.fangrui.boot 包及其⼦包 debug 及其以上的记录,并输出到⽂件中-->        <Logger name="qg.fangrui.boot" level="debug">            <!-- AppenderRef 可以控制⽂件输出对象-->            <AppenderRef ref="File" />        </Logger>
<!--根记录全部输出到控制台上-->
<Root level="debug">
<AppenderRef ref="Console" />        </Root>    </Loggers></Configuration>
3.在 application.properties 中加⼊配置⽂件的扫描位置
4.再次启动并访问
控制台输出⽇志:
⽇志⽂件:
4. springboot 1.4.1.RELEASE + slf4j + log4j2
参考项⽬地址:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。