Log4j 的 JDBCAppender 配置

来自姬鸿昌的知识库
跳到导航 跳到搜索

https://www.bilibili.com/video/BV1iJ411H74S?p=16

建表

CREATE TABLE `log4j`.`log` (
  `log_id` INT NOT NULL AUTO_INCREMENT,
  `project_name` VARCHAR(255) NULL COMMENT '项目名',
  `create_date` VARCHAR(255) NULL COMMENT '创建时间',
  `level` VARCHAR(255) NULL COMMENT '优先级',
  `category` VARCHAR(255) NULL COMMENT '所在类的全名',
  `file_name` VARCHAR(255) NULL COMMENT '输出日志消息产生时所在的文件名称',
  `thread_name` VARCHAR(255) NULL COMMENT '日志事件的线程名',
  `line` VARCHAR(255) NULL COMMENT '行号',
  `all_category` VARCHAR(255) NULL COMMENT '日志事件的发生位置',
  `message` VARCHAR(4000) NULL COMMENT '输出代码中的指定的消息',
  PRIMARY KEY (`log_id`));

pom.xml 中加入依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

log4j.properties

# 指定 RootLogger 顶级父元素默认配置信息
# 指定日志级别=trace,使用的 appender 为 console
log4j.rootLogger = trace,logDB


#mysql
log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout = org.apache.log4j.PatternLayout
log4j.appender.logDB.driver = com.mysql.jdbc.Driver
log4j.appender.logDB.URL = jdbc:mysql://localhost:3306/log4j
log4j.appender.logDB.user = root
log4j.appender.logDB.password = 123456
log4j.appender.logDB.sql = INSERT INTO log ( project_name , create_date , level , category , file_name , thread_name , line , all_category , message ) \
VALUES ( 'log4j-demo', '%d{yyyy-MM-dd HH:mm:ss}', '%p', '%c', '%F', '%t', '%L', '%l', '%m')

注意

properties 里的 sql 太长了用“\”换行

log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@18b4aac2.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader@18b4aac2 class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@18b4aac2.
log4j: Using URL [file:/E:/record/2023/2/19/log4j-demo/target/classes/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL file:/E:/record/2023/2/19/log4j-demo/target/classes/log4j.properties
log4j: Parsing for [root] with value=[trace,logDB].
log4j: Level token is [trace].
log4j: Category root set to TRACE
log4j: Parsing appender named "logDB".
log4j: Parsing layout options for "logDB".
log4j: End of parsing for "logDB".
log4j: Setting property [user] to [root].
log4j: Setting property [URL] to [jdbc:mysql://localhost:3306/log4j].
log4j: Setting property [sql] to [INSERT INTO log ( project_name , create_date , level , category , file_name , thread_name , line , all_category , message ) VALUES ( 'log4j-demo', '%d{yyyy-MM-dd HH:mm:ss}', '%p', '%c', '%F', '%t', '%L', '%l', '%m')].
log4j: Setting property [password] to [123456].
log4j: Setting property [driver] to [com.mysql.jdbc.Driver].
log4j: Parsed "logDB" options.
log4j: Finished configuring.
Sat Feb 25 19:36:10 CST 2023 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.