集成Log4J日志
Posted 阿毅的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集成Log4J日志相关的知识,希望对你有一定的参考价值。
8.1 Log4J介绍
8.1.1 Log4J概述
图8-1 Log4J日志框架简单原理图
Loggers(记录器):Loggers组件被分为七个级别:all、debug、info、warn、error、fatal、off。这七个级别是有优先级的:all<debug< info< warn< error< fatal<off,分别用来指定这条日志信息的重要程度。Log4j有一个规则:只输出级别不低于设定级别的日志信息。假设Loggers级别设定为info,则info、warn、error和fatal级别的日志信息都会输出,而级别比info低的debug则不会输出。Log4j允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。
Appenders(输出源):Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。
Layouts(布局):Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。
<Configuration status="WARN">
<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="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
8.2 集成Log4j2
8.2.1 引入依赖
!-- log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排查Spring Boot默认日志 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
8.2.2 添加Log4J配置
##log4j配置
logging.config=classpath:log4j2.xml
配置完成之后,Spring Boot就会帮我们在classpath路径下查找log4j2.xml文件,所以最后一步,我们只需要配置好log4j2.xml文件即可。
8.2.3 创建log4j2.xml文件
<Configuration status="WARN">
<appenders>
</appenders>
<loggers>
<root level="all">
</root>
</loggers>
</Configuration>
8.3 使用Log4J记录日志
8.3.1 打印到控制台
<Configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<!-- 指定日志的输出格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</Console>
</appenders>
<loggers>
<root level="all">
<!-- 控制台输出 -->
<appender-ref ref="Console"/>
</root>
</loggers>
</Configuration>
<Console/>:指定控制台输出。
<PatternLayout/>:控制日志的输出格式。
/**
* 描述:监听器
* @author Ay
* @date 2017/11/4
*/
public class AyUserListener implements ServletContextListener {
//省略代码
//需要添加的代码
Logger logger = LogManager.getLogger(this.getClass());
public void contextInitialized(ServletContextEvent servletContextEvent) {
//查询数据库所有的用户
List<AyUser> ayUserList = ayUserService.findAll();
//清除缓存中的用户数据
redisTemplate.delete(ALL_USER);
//存放到redis缓存中
redisTemplate.opsForList().leftPushAll(ALL_USER, ayUserList);
//真实项目中需要注释掉
List<AyUser> queryUserList = redisTemplate.opsForList().range(ALL_USER, 0, -1);
//System.out.println("缓存中目前的用户数有:" + queryUserList.size() + " 人");
//System.out.println("ServletContext上下文初始化");
logger.info("ServletContext上下文初始化");
logger.info("缓存中目前的用户数有:" + queryUserList.size() + " 人");
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
//System.out.println("ServletContext上下文销毁");
logger.info("ServletContext上下文销毁");
}
}
8.3.2 记录到文件
<Configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<!-- 设置日志输出的格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</Console>
<RollingFile name="RollingFileInfo" fileName="D:/info.log"
filePattern="D:/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="INFO"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</root>
</loggers>
</Configuration>
<RollingFile>标签:fileName用于定义日志的数据路径,如D:/info.log。filePattern定义日志的匹配方式。
<Filters>标签:日志过滤策略,<ThresholdFilter>标签用于指定日志信息的最低输出级别,默认为DEBUG。
/**
* 描述:用户服务层实现类
* @author 阿毅
* @date 2017/10/14
*/
//@Transactional
public class AyUserServiceImpl implements AyUserService {
//省略代码
//需要添加的代码
Logger logger = LogManager.getLogger(this.getClass());
public void delete(String id) {
ayUserRepository.delete(id);
//需要添加的代码
logger.info("userId:" + id + "用户被删除");
}
//省略代码
}
8.3.3 测试
图8-2 redis断点调试界面
(SpringRunner.class)
public class MySpringBootApplicationTests {
//省略代码
Logger logger = LogManager.getLogger(this.getClass());
public void testLog4j(){
ayUserService.delete("4");
logger.info("delete success!!!");
}
}
图8-3 redis断点调试界面
图8-4 redis断点调试界面
提示:启动项目的时候,记得启动Redis服务器,否则会报错。
以上是关于集成Log4J日志的主要内容,如果未能解决你的问题,请参考以下文章