spring Boot 集成log4j2

1. 表结构:

CREATE TABLE `log_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `log_date` datetime DEFAULT NULL COMMENT '日志日期时间',
  `log_level` varchar(32) DEFAULT NULL COMMENT '日志级别',
  `log_class` varchar(255) DEFAULT NULL COMMENT '日志所在的类',
  `line_number` int(255) DEFAULT NULL COMMENT '在类中的行数',
  `log_detail` longtext COMMENT '日志详情',
  `log_module` varchar(255) DEFAULT NULL COMMENT '标识,多个项目的时候,区分一下',
  PRIMARY KEY (`id`)
) 

2. 引入依赖的jar

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>

3. 数据源:

package com.cn.log;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.log4j.jdbc.JDBCAppender;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class Log2ConnectionFactory extends JDBCAppender {

    //Druid数据源
    private DruidDataSource dataSource1;

    private static Log2ConnectionFactory logConnectionFactory;

    public Log2ConnectionFactory() {
        super();
    }

    @Override
    protected void closeConnection(Connection con) {
        if (con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    protected Connection getConnection() throws SQLException {
        if (dataSource1 == null) {
            Properties result = new Properties();
            result.put("driverClassName", "com.mysql.jdbc.Driver");
            result.put("url", "jdbc:mysql://192.168.0.109:3309/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true");
            result.put("username", "root");
            result.put("password", "root");
            try {
                dataSource1 = (DruidDataSource) DruidDataSourceFactory.createDataSource(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return dataSource1.getConnection();
    }

    public static Connection getDataSourceConnection() throws SQLException {
        if (logConnectionFactory == null) {
            logConnectionFactory = new Log2ConnectionFactory();
        }
        return logConnectionFactory.getConnection();
    }

}

 

4. log4j2.xml文件配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <properties>
        <!--存放目录-->
        <property name="LOG_HOME">/log</property>
        <!--表的名字-->
        <property name="LOG_TABLE_NAME">log_table</property>
    </properties>

    <Appenders>
        <!--控制台打印-->
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout charset="UTF-8" pattern="[%-5p] %d %c - %m%n"/>
        </Console>

        <!--存储在文件-->
        <File name="File" fileName="${LOG_HOME}/game-api.log">
            <!--显示样式-->
            <PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n"/>
        </File>

        <!--追加的形式存储在文件中-->
        <RollingFile name="RollingFile" fileName="${LOG_HOME}/rar.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout charset="UTF-8"
                           pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <!--日志文件最大值 第二天压缩-->
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
        </RollingFile>

        <!--jdbc的形式存储-->
        <JDBC name="databaseAppender" tableName="${LOG_TABLE_NAME}">
            <ConnectionFactory class="com.cn.log.Log2ConnectionFactory"
                               method="getDataSourceConnection"/>
            <!--日期-->
            <Column name="log_date" pattern="%d{yyyy-MM-dd HH:mm:ss}"/>
            <!--日志级别-->
            <Column name="log_level" pattern="%p"/>
            <!--打印日志所在的类-->
            <Column name="log_class" pattern="%c"/>
            <!--日志在第几行-->
            <Column name="line_number" pattern="%L"/>
            <!--日志详情-->
            <Column name="log_detail" pattern="%m"/>
            <!--多个项目的时候做区分-->
            <Column name="log_module" pattern="test"/>
        </JDBC>
    </Appenders>


    <Loggers>
        <root level="info">
            <AppenderRef ref="CONSOLE"/>
            <AppenderRef ref="File"/>
            <AppenderRef ref="databaseAppender"/>
        </root>
        <!--所在包-->
        <Logger name="com.cn" level="error">
            <AppenderRef ref="databaseAppender"/>
        </Logger>
    </Loggers>
</configuration>

5. 测试:

package com.cn.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/game-api/demo")
public class DemoController {

    private static final Logger logger = LoggerFactory.getLogger(DemoController.class);

    @GetMapping(value = "/test")
    public void test() {
        logger.error("hi,cn_yang");
    }

}

6.效果:

Spring Boot提供了对不同日志框架的集成支持,包括Log4j。在Spring Boot中使用Log4j作为日志框架,可以按照以下步骤进行配置: 1. 在项目的pom.xml文件中,添加Log4j的依赖项。可以使用如下代码: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> </dependency> ``` 2. 在项目的`src/main/resources`目录下,创建一个`log4j.properties`文件,用于配置Log4j。 3. 在`log4j.properties`文件中,配置相应的日志输出格式、日志级别、日志文件路径等。例如: ```properties # 设置日志输出级别 log4j.rootLogger=INFO, stdout, file # 控制台输出的Appender log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 文件输出的Appender log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=/path/to/log/file.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=5 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n ``` 在文件配置中,`log4j.rootLogger`设置了日志输出级别,`log4j.appender.stdout`指定了控制台输出的Appender,`log4j.appender.file`指定了文件输出的Appender。你可以根据自己的需求进行配置。 4. 在Spring Boot应用程序的启动类上添加`@PropertySource`注解,用于加载Log4j配置文件。例如: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.PropertySource; @SpringBootApplication @PropertySource("classpath:log4j.properties") public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 这样,当你运行Spring Boot应用程序时,Log4j将按照配置输出日志信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值