在SSM项目上整合log4j2

需求:SSM项目上添加log4j2

IDE工具:Eclipse

搭建环境:jdk1.8   tomcat8.5

当前目录结构:

开整。

1. 添加依赖,如下:

        <!-- 添加slf4j依赖 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

        <!-- 添加log4j2依赖 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>
        <!-- web容器中需要添加log4j-web -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>2.11.1</version>
        </dependency>
        <!-- 桥接slf4j -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.11.1</version>
        </dependency>

说明:简单说一下slf4j和log4j2

           slf4j是一个为java程序提供日志输出的统一接口,并不是一个具体的的日志实现方案,就好像我们经常使用的jdbc一样。因此单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如apache的org.apache.log4j.Logger、jdk自带的java.util.logging.Logger等。

            log4j2是Apache Log4j2,是对Log4j的升级,与其前身Log4j 1.X相比有了显著的改进,并提供了许多Logback中可用的改进,同时修复了Logback架构中一些固有问题。

 

2. 编写日志配置文件,该文件命名为log4j2.xml,具体内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<!--设置log4j2的自身log级别为DEBUG-->
<configuration status="DEBUG " monitorInterval="30">
 
    <appenders>
        <!-- 控制台输出 -->
        <console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %contextName [%thread] %-5level %logger{36} [%file : %line] - %msg%n"/>
        </console>
        
        <!-- fileName:输出路径  filePattern:命名规则 -->
        <RollingFile name="RollingFileInfo" fileName="D:\\SSMTest\\ssmtest.log"
                     filePattern="D:\\SSMTest\\$${date:yyyy-MM-dd}/allOut-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                 <!--控制台如果只输出info及以上级别的信息(onMatch),level=info,其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <!-- 输出格式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %contextName [%thread] %-5level %logger{36} [%file : %line] - %msg%n"/>
            <Policies>
                <TimeBasedTriggerzingPolicy interval="1"/>
                <!-- SizeBasedTriggeringPolicy单个文件的大小限制 -->
                <SizeBasedTriggeringPolicy size="20 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy同一个文件下的最大文件数,默认为最多同一文件夹下7个文件 -->
            <DefaultRolloverStrategy max="50"/>
        </RollingFile>
    </appenders>
 
    <loggers>
        <!--过滤掉spring和hibernate的一些无用的debug信息-->
        <logger name="org.springframework" level="INFO">
        </logger>
        <logger name="org.mybatis" level="INFO">
        </logger>
        <root level="trace">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
         <!--    <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/> -->
        </root>
    </loggers>
 
</configuration>
 

3. 在web.xml添加日志监听和过滤器

   <!-- 配置log4j监听器和过滤器 -->
    <!-- 默认在class类路径下,不需要额外配置引用 ,如果更改到其他地方,则需配置 -->
   <!-- <context-param>
        <param-name>log4jConfiguration</param-name>
        <param-value>classpath:log4j2.xml</param-value>
    </context-param> -->

    <listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
    </listener>
    <filter>
        <filter-name>log4jServletFilter</filter-name>
        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>log4jServletFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>

说明:如果配置文件没有放置在类路径下,需要指定配置文件的路径

4. 测试

4.1 将TestAll类中所有的sysout打印的方式改成如下:

package com.yzpt.test;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.yzpt.entity.Book;
import com.yzpt.entity.User;
import com.yzpt.mapper.UserMapper;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:applicationContext.xml"})
public class TestAll {
    private static final Logger logger = LogManager.getLogger(TestAll.class);

    @Autowired
    private UserMapper usermapper;
    
    @Test
    public void testSpring() {
        
        @SuppressWarnings("resource")
        ApplicationContext ac =  new ClassPathXmlApplicationContext("applicationContext.xml");
        Book book = (Book) ac.getBean("book");
        
        logger.info(book.getBookId());
        logger.info(book.getBookName());
        logger.info(book.getWriter());
        logger.info(book.getPublishingHouse());
        
    }
    
    @Test
    public void testSSM() {
        int id1 = 1;
        try {    
            User user1 = usermapper.getUserInfor(id1);
            logger.info("用户1姓名:" + user1.getUsername());
            logger.info("用户1年龄:" +user1.getAge());
            logger.info("用户1性别:" +user1.getSex());
        }catch (Exception e) {
            logger.info("SQL查询失败!"+e);
        }    
    }
}

4.2 在testSpring()方法后面右击Debug as ,选择Junit Test,效果如下:

4.3 测试成功

说明:控制台输出打印的格式可以在log4j2.xml中配置,可以根据自己喜欢的格式来配置。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值