springboot使用logback,日志记录方式:控制台,文件,数据库

使用xml文件配置:在resources下创建logback-spring.xml,spring会默认去读这个文件


<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">


    <!-- 控制台日志 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>


    <!-- 文件日志,每天一个,最多30个 -->
    <appender name="FileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>d:\test.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>d:\test.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %-4relative [%thread] %-5level %logger{35} %class:%L - %msg %n</pattern>
        </encoder>
    </appender>


    <!-- Log格式-用户操作-数据库日志 -->
    <appender name="UserLogDBAppender" class="com.grm.logbacktest.logback.TopDBAppender">
        <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
            <dataSource class="org.apache.tomcat.jdbc.pool.DataSource">
                <driverClassName class="com.mysql.jdbc.Driver" />
                <url>jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</url>
                <username>root</username>
                <password>root</password>
            </dataSource>
        </connectionSource>


        <insertsql>
            INSERT INTO TB_USER_LOG(ID, ACCOUNT, USER_ID, USER_NAME, ORG_CODE, ORG_NAME, IP, DESCRIPTION, LEVEL)
            VALUES(uuid(),?,?,?,?,?,?,?,?);
        </insertsql>


        <params>
            %X{account},%X{userId},%X{userName},%X{orgCode},%X{orgName},%X{ip},%X{description},%X{level}
        </params>
        <dateformat>yyyy-MM-dd HH:mm:ss</dateformat>
    </appender>


    <!-- 根日志logger -->
    <root level="INFO" name="root">
        <!--输出日志到文件-->
        <appender-ref ref="FileAppender"/>
        <!--控制台输出日志-->
        <appender-ref ref="STDOUT"/>
    </root>


    <!-- 用户操作日志logger -->
    <logger name="UserLogger" level="INFO" >
        <appender-ref ref="UserLogDBAppender"/>
    </logger>


</configuration>


其中: ch.qos.logback.core.ConsoleAppender 日志在控制台输出
      ch.qos.logback.core.rolling.RollingFileAppender 日志输出到文件
      com.grm.logbacktest.logback.TopDBAppender 自定义类,可以实现将日志插入到自己指定的数据库


在需要记录日志的类中定义
private static final Logger loggerRoot = LoggerFactory.getLogger("root");//root为xml文件中的root标签的名字
配合root标签(在root标签内添加appender-ref)可以实现将日志记录到控制台和文件


日志存入数据库,logback有默认的DBAppender(所在位置ch.qos.logback.classic.db.DBAppender),如果使用默认的appender的话,存入数据库的表也是固定的,表结构的sql在ch.qos.logback.classic.db.script包下,里面有适合的sql文件。但是如果想要自定义数据库日志表的话就不能使用默认的DBAppender,需要自己写DBAppender


实现写入自定义数据库表的功能,核心有TopDBAppender(解析logback-spring.xml时使用),TopLogger(记录日志时使用),WebBaseController(web层想要记录日志需要继承这个类)


private static final TopLogger loggerUser = new TopLogger("UserLogger");//UserLogger为xml文件中logger标签的名字
使用时 UserLog userLog = new UserLog();
userLog.setDescription("日志记录数据库测试");//description自定义的描述信息
super.info(userLog);


源码地址:https://github.com/GRM-RM/logback-test
Spring Boot使用Logback作为默认的日志框架。Logback是一个功能强大的日志框架,它支持多种输出格式和多种日志级别,并且可以通过配置文件进行灵活的配置。 要使用Logback,只需要在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 然后,在src/main/resources目录下创建logback.xml文件,进行日志配置。例如: ``` <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration> ``` 这个配置文件定义了一个名为CONSOLE的输出器,它将日志输出到控制台日志格式为时间、线程名、日志级别、类名和日志信息。日志级别为INFO,表示只输出INFO级别及以上的日志。 除了控制台输出,Logback还支持输出到文件数据库等多种方式。可以根据具体需求进行配置。 最后,在代码中使用Logger记录日志即可: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void doSomething() { logger.info("Doing something..."); } } ``` 这样,当MyService的doSomething方法被调用时,日志信息将被记录下来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值