Java SLF4J按标记筛选日志消息

Java SLF4J按标记筛选日志消息,java,spring,spring-boot,logging,slf4j,Java,Spring,Spring Boot,Logging,Slf4j,我在应用程序中使用Spring Boot和Slf4j。我需要记录特定的审核事件。使用JPA、Hibernate或Spring数据进行审计JPA不适合我的需要,因为我想记录服务级别审计而不是DB。所以,我决定对记录器使用标记,然后将它们保存到数据库中 但是,如何中断所有日志消息并过滤具有审核标记的日志消息?总之,它们也应该像没有标记的文件一样登录到一个文件中。数据库Appender Spring使用Logback作为底层日志框架 您可以在src/resources中创建logback spring

我在应用程序中使用Spring Boot和Slf4j。我需要记录特定的审核事件。使用JPA、Hibernate或Spring数据进行审计JPA不适合我的需要,因为我想记录服务级别审计而不是DB。所以,我决定对记录器使用标记,然后将它们保存到数据库中


但是,如何中断所有日志消息并过滤具有审核标记的日志消息?总之,它们也应该像没有标记的文件一样登录到一个文件中。

数据库Appender

Spring使用Logback作为底层日志框架

您可以在
src/resources
中创建
logback spring.xml
文件,然后配置记录器。有默认的文件appender,您可以添加数据库appender

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <springProperty name="spring.datasource.driverClassName" source="spring.datasource.driverClassName"/>
    <springProperty name="spring.datasource.url" source="spring.datasource.url"/>
    <springProperty name="spring.datasource.username" source="spring.datasource.username"/>
    <springProperty name="spring.datasource.password" source="spring.datasource.password"/>

    <appender name="DATABASE" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>${spring.datasource.driverClassName}</driverClass>
            <url>${spring.datasource.url}</url>
            <user>${spring.datasource.username}</user>
            <password>${spring.datasource.password}</password>
        </connectionSource>
    </appender>

    <logger name="AUDIT" level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="DATABASE"/>
    </logger>
 </configuration>
要将其包含在输出中,必须将其添加到日志模式中。例如:

<Pattern>%X{username} - %m%n</Pattern>
%X{username}-%m%n
进一步阅读

我建议阅读logback手册以获取有关appenders和MDC的更多信息:


数据库附加程序

Spring使用Logback作为底层日志框架

您可以在
src/resources
中创建
logback spring.xml
文件,然后配置记录器。有默认的文件appender,您可以添加数据库appender

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <springProperty name="spring.datasource.driverClassName" source="spring.datasource.driverClassName"/>
    <springProperty name="spring.datasource.url" source="spring.datasource.url"/>
    <springProperty name="spring.datasource.username" source="spring.datasource.username"/>
    <springProperty name="spring.datasource.password" source="spring.datasource.password"/>

    <appender name="DATABASE" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>${spring.datasource.driverClassName}</driverClass>
            <url>${spring.datasource.url}</url>
            <user>${spring.datasource.username}</user>
            <password>${spring.datasource.password}</password>
        </connectionSource>
    </appender>

    <logger name="AUDIT" level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="DATABASE"/>
    </logger>
 </configuration>
要将其包含在输出中,必须将其添加到日志模式中。例如:

<Pattern>%X{username} - %m%n</Pattern>
%X{username}-%m%n
进一步阅读

我建议阅读logback手册以获取有关appenders和MDC的更多信息:


为什么不创建一个特定的记录器,比如LoggerFactory.getLogger(“审计”)。然后你可以用它来定义附加器和级别这就是我要做的。但是,我想在每个条目中附加一些其他信息(即登录用户以执行操作),修改一些内容,然后保存到DB中。@kamaci您可以扩展附加程序并修改行为以包括您的更改。为什么不创建一个特定的记录器,如LoggerFactory.getLogger(“审计”)。然后你可以用它来定义附加器和级别这就是我要做的。但是,我想在每个条目中附加一些其他信息(即登录用户以执行操作),修改一些内容,然后保存到DB中。@kamaci您可以扩展附加程序并修改行为以包括您的更改。