环境参数:
jdk 1.8
idea 2019.2
mysql 8.x
一、创建项目
参考链接
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
- 项目目录
- 拷贝依赖
jar
包
将连接mysql
的jar
包,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
文件夹,按照编译后的路径修改就可