Java web 中使用 log4j 将日志记录数据库

环境参数:
jdk 1.8
idea 2019.2
mysql 8.x

一、创建项目

参考链接

<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
  • 项目目录
    在这里插入图片描述
  • 拷贝依赖jar
    将连接mysqljar包,Log4j日志的jar包拷贝到 Tomcat安装目录下lib文件夹里

二、添加日志功能

  • 添加数据库表
DROP TABLE IF EXISTS `WDZLOG`;
CREATE TABLE `WDZLOG` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Class` varchar(255) DEFAULT NULL,
  `Mothod` varchar(255) DEFAULT NULL,
  `CreateTime` varchar(255) DEFAULT NULL,
  `LogLevel` varchar(20) DEFAULT NULL,
  `LogLine` varchar(255) DEFAULT NULL,
  `MSG` varchar(555) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
  • 添加配置文件
#log4j.rootLogger=error,stdout,info,debug,error
log4j.rootCategory=info,stdout,database
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n

#下面是配置将日志信息插入数据库,
#配置输出目标为数据库(假如要将日志在控制台输出,配置为log4j.appender. stdout =org.apache.log4j.ConsoleAppender;将日志写入文件,配置为log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
#这样的配置在许多地方都要有,需要可查有关资料),当然你也可以自己扩展org.apache.log4j.jdbc.JDBCAppender这个类,只需要在这里配置就可以了例如我们配置我自己扩展的MyJDBCAppender,配置为#log4j.appender.db=com.neam.commons.MyJDBCAppender

log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.layout=org.apache.log4j.PatternLayout
log4j.appender.database.driver=com.mysql.cj.jdbc.Driver
#设置要将日志插入到数据库的驱动
log4j.appender.database.Threshold=info
#定义什么级别的错误将写入到数据库中
log4j.appender.database.BufferSize=1
#设置缓存大小,就是当有1条日志信息是才忘数据库插一次
log4j.appender.database.URL=jdbc:mysql://62.234.23.117:3306/atm?useSSL=false&&characterEncoding=utf8&allowPublicKeyRetrieval=true&serverTimezone=UTC
log4j.appender.database.user=root
log4j.appender.database.password=Yunduo2018&
log4j.appender.database.sql=insert into ATMLOG (Class,Mothod,createTime,LogLevel,LogLine,MSG) values ('%C','%M','%d{yyyy-MM-dd HH:mm:ss}','%p','%l','%m')

  • 初始化log4j

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import javax.servlet.http.HttpServlet;


public class Log4jInit extends HttpServlet {
    private final Logger logger = Logger.getLogger(String.valueOf(Log4jInit.class));
    @Override
    public void init() {
        try{
            String path = getServletContext().getRealPath("/");
            String profile = path+getInitParameter("log4j");
            PropertyConfigurator.configure(profile);
            logger.info("日志初始化完成!!!");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

  • 在web.xml中配置
<servlet>
        <servlet-name>Log4jInit</servlet-name>
        <servlet-class>util.Log4jInit</servlet-class>
        <init-param>
            <param-name>log4j</param-name>
            <param-value>/WEB-INF/classes/log4j.properties</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Log4jInit</servlet-name>
        <url-pattern>/atm/Log4jInit</url-pattern>
    </servlet-mapping>

三、实现结果

在这里插入图片描述

四、问题

  • 可能会遇到找不的配置文件的问题
  • 是因为路径写错误了(控制台会输出错误路径的)
  • 打开out文件夹,按照编译后的路径修改就可
    在这里插入图片描述

五、参考链接


在这里插入图片描述

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页