SpringBoot 2.0 | Log4j2 日志写入数据库

1.建立存储用户登录日志表

create table `log`(
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `username` varchar(255) DEFAULT NULL,
     `userIP` varchar(255) DEFAULT NULL,
     `actionClassName` varchar(6000) DEFAULT NULL,
     `actionDate` varchar(255) DEFAULT NULL,
     `result` varchar(6000) DEFAULT NULL,
     PRIMARY KEY(`id`)
     )ENGINE=InnoDB AUTO_INCREMENT =1 DEFAULT CHARSET = utf8;

2.添加maven依赖

       
			org.apache.logging.log4j
			log4j-api
			2.11.1
		
		
			org.apache.logging.log4j
			log4j-core
			2.11.1
		
		
		
		
			com.alibaba
			druid
			1.0.14
		

3.配置拦截器Filter

package com.hly.sirius.filter;

/**
 * @author :hly
 * @github :github.com/SiriusHly
 * @blog :blog.csdn.net/Sirius_hly
 * @date :2018/10/2
 */
@WebFilter(filterName = "VisitorFilter",urlPatterns = "/index")
public class VisitorFilter extends OncePerRequestFilter {

    private static Logger logger = LogManager.getLogger(VisitorFilter.class);

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        HttpSession session = request.getSession();
        String userId = (String) session.getAttribute("userId");
        String userIP = request.getRemoteUser();
        ThreadContext.put("userId",userId);
        ThreadContext.put("userIP",userIP);
        System.err.println("登录用户:"+userId);
        System.err.println("登录IP:"+userIP);
        logger.error("用户:"+userId);

    }
}

存取要保存到数据库的值

ThreadContext.put("userIP",userIP);

通过配置文件取得值,保存到数据库

在Application开启Servlet扫描注解

@ServletComponentScan(basePackages = {"com.hly.sirius.filter"})

4.连接数据库配置

log4j2官方文档

package com.hly.sirius.config;

/**
 * @author :hly
 * @github :github.com/SiriusHly
 * @blog :blog.csdn.net/Sirius_hly
 * @date :2018/10/2
 */
public class ConnectionFactoryConfig  {

    private DruidDataSource dataSource;

    private  static ConnectionFactoryConfig connectionFactoryConfig;

    private Connection getConnection() throws SQLException {
        System.err.println("实例化");
        Properties properties = new Properties();
        String user = "root";
        String password = "roof";
        String url = "jdbc:mysql://localhost:3306/sirius?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true";
        String driverClassName = "com.mysql.jdbc.Driver";
        properties.put("driverClassName",driverClassName);
        properties.put("url",url);
        properties.put("username",user);
        properties.put("password",password);

        try {
            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            try {
               init();
            } catch (Exception e2) {
            }
        }
        return  dataSource.getConnection();
    }

    public static Connection getDatabaseConnection() throws SQLException {
       if(connectionFactoryConfig==null){
           connectionFactoryConfig = new ConnectionFactoryConfig();
       }
       return connectionFactoryConfig.getConnection();

    }

    public void init(){
        try {
            if (dataSource != null)
                dataSource.close();
        } catch (Exception e) {
        }
    }
}

5.配置日志log4j2-spring.xml




    

        
            
        

        
        
            
            
        

        
            
                %d [%t] %-5level %logger{36} - %msg%n
            
            
                
            
        

        
        
            
            
            
            
            
            
        

    
    
        
            
            
            
            
        

        
            
        
    

6.运行程序,数据插入数据库

SpringBoot 2.0 | Log4j2 日志写入数据库_第1张图片

 

你可能感兴趣的:(SpringBoot 2.0 | Log4j2 日志写入数据库)