log4J2写入mysql

本文介绍如何使用Log4j2将日志记录到MySQL数据库中,包括配置文件、连接池实现及测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看这篇文章前可以先看下 http://blog.youkuaiyun.com/ererfei/article/details/50884155,我这只实验了mysql,其他没弄过


log4j2.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!-- 不打印log4j内部日志,配置文件刷新频率为30秒 -->
<Configuration status="error" monitorInterval="30">
<Appenders>
<Console name="consolePrint" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<JDBC name="databaseAppender" tableName="ibs_log">
<ConnectionFactory class="com.session.test.ConnectionFactory" method="getDatabaseConnection" />
<Column name="log_date" isEventTimestamp="true" />
<Column name="log_file" pattern="%file" />
<Column name="log_line" pattern="%line" />
<Column name="log_thread" pattern="%thread" />
<Column name="log_level" pattern="%level" />
<Column name="log_message" pattern="%message" />
</JDBC>
</Appenders>
<Loggers>
<Root level="error">
<appender-ref ref="consolePrint" />
<appender-ref ref="databaseAppender" level="error"/>
</Root>
</Loggers>
</Configuration>

ConnectionFactory.java

package com.session.test;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDataSource;
import org.apache.commons.pool.impl.GenericObjectPool;

public class ConnectionFactory {
private static interface Singleton {
final ConnectionFactory INSTANCE = new ConnectionFactory();
}

private final DataSource dataSource;

private ConnectionFactory() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(0);
}

Properties properties = new Properties();
properties.setProperty("user", "账号");
properties.setProperty("password", "密码");

GenericObjectPool pool = new GenericObjectPool();
DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
"jdbc:mysql://localhost:3306/数据库名字", properties);

new PoolableConnectionFactory(connectionFactory, pool, null, null, false, true);

this.dataSource = new PoolingDataSource(pool);
}

public static Connection getDatabaseConnection() throws SQLException {
return Singleton.INSTANCE.dataSource.getConnection();
}
}
数据库创表

  1. DROP TABLE IF EXISTS `ibs_log`;  
  2. CREATE TABLE `ibs_log` (  
  3.  `log_id` int(10) NOT NULL AUTO_INCREMENT,  
  4.  `log_date` datetime NOT NULL COMMENT '日期',  
  5.  `log_file` varchar(255) DEFAULT NULL COMMENT '文件名',  
  6.  `log_line` varchar(255) DEFAULT NULL COMMENT '行号',  
  7.   `log_thread`varchar(255) DEFAULT NULL COMMENT '线程',  
  8.  `log_level` varchar(255) DEFAULT NULL COMMENT 'Log级别 info warndebug error等',  
  9.  `log_message` varchar(2048) DEFAULT NULL COMMENT 'Log信息',  
  10.  PRIMARY KEY (`log_id`,`log_date`),  
  11.   KEY`INDEX_LOG_DATE` (`log_date`) USING BTREE  
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
测试

 @Test
    public void test_select() {
          //这样自定义的错误就可以记录在表了,如果要系统详细信息,就修改下log4j2.xml的配置

          Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);  
   logger.error("自定义错误");  
     
    }
需要的包: 以下就列出了 log4j2 的包

<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>

  <dependency>
   <groupId>commons-dbcp</groupId>
   <artifactId>commons-dbcp</artifactId>
   <version>1.4</version>
</dependency>
</dependencies>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值