看这篇文章前可以先看下 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();
}
}
数据库创表
- DROP TABLE IF EXISTS `ibs_log`;
- CREATE TABLE `ibs_log` (
- `log_id` int(10) NOT NULL AUTO_INCREMENT,
- `log_date` datetime NOT NULL COMMENT '日期',
- `log_file` varchar(255) DEFAULT NULL COMMENT '文件名',
- `log_line` varchar(255) DEFAULT NULL COMMENT '行号',
- `log_thread`varchar(255) DEFAULT NULL COMMENT '线程',
- `log_level` varchar(255) DEFAULT NULL COMMENT 'Log级别 info warndebug error等',
- `log_message` varchar(2048) DEFAULT NULL COMMENT 'Log信息',
- PRIMARY KEY (`log_id`,`log_date`),
- KEY`INDEX_LOG_DATE` (`log_date`) USING BTREE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
public void test_select() {
//这样自定义的错误就可以记录在表了,如果要系统详细信息,就修改下log4j2.xml的配置
Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
logger.error("自定义错误");
}
<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>