失效链接处理 |
slf4j+log4j2配置教程 PDF 下载
本站整理下载:
提取码:7xc3
相关截图:
主要内容:
简单入门
step1:引入依赖
在springboot-web项目中引入依赖
step2:添加配置文件
配置文件:log4j2-spring.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 去掉springboot默认配置 --> <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>
step3:在代码中使用
初窥门径
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console> </appenders> <loggers> <root level="info"> <appender-ref ref="Console"/> </root> </loggers> </configuration> package com.guodx.midware.study.log4j2.web; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /*** <b><code>HelloController</code></b> * <p/> * Description * <p/> * <b>Creation Time:</b> 2020/11/4 5:32. ** @author guodx */ @RestController public class HelloController { private static final Logger logger = LoggerFactory.getLogger(HelloController.class); @GetMapping("/hello") public String hello(String param){ //error级别的信息,参数就是你输出的信息 logger.error("Did it again!, {} - {}", param, 1); //info级别的信息 logger.info("我是info信息"); logger.debug("我是debug信息"); logger.warn("我是warn信息"); return "Hello"; } }
日志的级别
log4j规定了默认的几个级别: trace < debug < info < warn < error < fatal 等.
trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,
我们可以设置最低日志级别不让他输出。
debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea
的debug功能就好了么。
info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有
error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
error: 错误信息。用的也比较多。
fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么
紧张,其实就是一个程度的问题。
logger配置name的机制
这个name有点类似java的包,是一种继承包含关系。比如: com.guodx.midware 包含 com.guodx.midware.logger
如果同时定义了这两个logger,则首先会精确匹配到更精细那个logger,也就是
com.guodx.midware.logger
默认情况下,它还会继续冒泡匹配 com.guodx.midware ,这也是重复日志产生的原因
如果不希望继续冒泡进行重复输出,可以在logger定义中添加 additivity="false" 以阻止冒泡
在上述的配置中:
如果有com.guodx.midware.logger.Hello打印info日志,则会使用配置1,结束;
如果有com.guodx.midware.util.HelloUtil打印info日志,则会使用配置2、配置3;
如果有com.guodx.midware.web.HelloController输出info日志,则会匹配配置3;
常见的Appender配置
输出到控制台:
级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出 <Logger name="com.guodx.midware.logger" level="info" additivity="false" /> --配置 1<Logger name="com.guodx.midware.util" level="info" additivity="true" /> --配置 2<Logger name="com.guodx.midware" level="info" additivity="false" /> --配置 3
输出到文件
输出到滚动日志文件
logger的Appender匹配
上述配置中,AppenderRef,是通过name属性来匹配关联输出到哪个Appender的。
pattern配置
<console name="Console" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="${LOG_PATTERN}"/> <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临
|