log4j2 jdbc appender

该博客介绍了如何配置Log4j2将应用日志记录到MySQL数据库中,包括所需的依赖、数据库连接池配置、日志表结构以及Log4j2的XML配置文件设置。示例代码展示了主程序如何使用SLF4J和Log4j2进行日志记录。
摘要由CSDN通过智能技术生成

项目要求将关键日志存储到 mysql 中,遂研究下log4j2…。
代码地址:支持资源免费下载。

依赖

demo 中的日志使用 log4j+slf4j。

  <dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-dbcp2</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>6.0.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.18.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.18.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>2.18.0</version>
    </dependency>
  </dependencies>

连接池和表

package org.example.configs;
import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class ConnectionFactory {
    private static BasicDataSource dataSource;
    private ConnectionFactory() {}
    
  	public static Connection getConnection() throws SQLException {
        if (dataSource == null) {
            dataSource = new BasicDataSource();
            dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false");
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUsername("root");
            dataSource.setPassword("");
        }
        return dataSource.getConnection();
    }
}
create table EVENT_LOGS (
    ID varchar(50) primary key,
    DATE_TIME timestamp,
    CLASS varchar(100),
    LEVEL varchar(10),
    MESSAGE TEXT,
    EXCEPTION TEXT
);

log4j2 配置文件

log4j2 支持 xml、yaml、json、properites 四种配置格式,这里用 xml,可以直接从官网抄,其他格式写法还得研究研究。配置了两个appender:console 和 mysql。

<Configuration >
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n</Property>
    </Properties>

    <Appenders>
        <Console name="console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
        <JDBC name="mysql" tableName="EVENT_LOGS">
            <ConnectionFactory class="org.example.configs.ConnectionFactory" method="getConnection"/>
            <Column name="ID" pattern="%u"/>
            <Column name="DATE_TIME" isEventTimestamp="true"/>
            <Column name="CLASS" pattern="%logger"/>
            <Column name="LEVEL" pattern="%level"/>
            <Column name="MESSAGE" pattern="%message"/>
            <Column name="EXCEPTION" pattern="%ex{full}" isClob="true"/>
        </JDBC>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="console"/>
            <AppenderRef ref="mysql"/>
        </Root>
    </Loggers>
</Configuration>

主代码

package org.example;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    static Logger logger = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        System.out.println("Hello World!");
        logger.info("Hello World !!");
    }
}

结果如下:mysql 中的数据就不展示了。

Hello World!
2022-07-22 19:29:10 INFO  Main - Hello World !!

啰嗦几句

slf4j 是日志接口,log4j 和 log4j2 它两个实现类, log4j2 是 log4j 1.x 的升级版,贴官网一句话:

Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems in Logback's architecture.

同理 jdbc 也是协议,使用 mysql 驱动,就可读写 mysql,使用 hive 驱动就可读写 hive。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值