一、数据库表
CREATE TABLE `admin_sys_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `uid` bigint(20) DEFAULT NULL COMMENT '操作者id', `username` varchar(255) DEFAULT '' COMMENT '操作者用户名', `client_ip` char(16) DEFAULT NULL COMMENT '操作者ip', `operate_module` varchar(255) DEFAULT '' COMMENT '类名,比如:AdminUserController', `operate_module_name` varchar(255) DEFAULT '' COMMENT '自定义内容,比如:用户登录', `operate_type` varchar(255) DEFAULT '' COMMENT '方法名', `operate_time` varchar(255) DEFAULT '' COMMENT '操作时间', `operate_content` varchar(255) DEFAULT '' COMMENT '操作内容', `operate_result` varchar(255) DEFAULT '' COMMENT '操作结果', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `is_deleted` tinyint(1) unsigned DEFAULT '0' COMMENT '1:删除,0:未删除', `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理员系统日志';
二、log4j配置文件
log4j.rootLogger=debug,Console log4j.logger.dbLogger=debug,DB log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n # Define the root logger with appender file log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.FILE.File=${log}/log.out log4j.appender.FILE.ImmediateFlush=true log4j.appender.FILE.Threshold=debug log4j.appender.FILE.Append=true log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.conversionPattern=%m%n # Define the root logger with appender file log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender log4j.appender.DB.encoding=UTF-8 #定义字符集防止中文乱码 #log4j.appender.dblog.Threshold=info #记录的最低日志级别。高于这个的就会全部会被记录。 #log4j.appender.dblog.BufferSize=10 #日志缓存;这个配置可以提交性能;累计操作N(10)个记录一次性写入数据库 log4j.appender.DB.URL=jdbc:mysql://127.0.0.1:3306/数据库名 log4j.appender.DB.driver=com.mysql.jdbc.Driver log4j.appender.DB.user=数据库用户名 log4j.appender.DB.password=数据库密码 log4j.appender.DB.sql=INSERT INTO admin_sys_log (uid,username,client_ip,operate_module,operate_module_name,operate_type,operate_time,operate_content,operate_result) VALUES ('%X{uid}','%X{username}','%X{clientIp}','%C{1}','%X{operateModuleName}','%M','%d{yyyy-MM-dd HHmmss}','%m','%X{operateResult}') log4j.appender.DB.layout=org.apache.log4j.PatternLayout log4j.appender.DB.layout.ConversionPattern=-[%d{yyyy-MM-dd HHmmss}]-[%C{1}]-[%M]-%X{clientIp}-%X{operateModuleName}-%X{username}-%X{operateContent}-%X{operateResult}-%m-%n
三、使用
MDC.put("clientIp",IpUtil.getIpAddr(request)); DB_LOGGER.info("登录系统成功");
参考:
文章来源: log4j记录日志到数据库