【问题标题】:SLF4J Filter Log Messages By MarkersSLF4J 按标记过滤日志消息
【发布时间】:2019-10-10 01:55:03
【问题描述】:

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

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

【问题讨论】:

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

标签: java spring spring-boot logging slf4j


【解决方案1】:

数据库追加器

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

您可以在src/resources 中创建一个logback-spring.xml 文件,然后配置您的记录器。有默认的 FILE appender,你可以添加你的 DATABASE 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>

其他信息

您可以使用映射诊断上下文 (MDC) 来存储要添加到每个日志条目的全局信息:

MDC.put("username", SecurityContextHolder.getContext().getAuthentication().getName());

要将其添加到输出中,您必须将其添加到日志模式中。例如:

<Pattern>%X{username} - %m%n</Pattern>

进一步阅读

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

https://logback.qos.ch/manual/mdc.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2014-10-21
    • 2020-05-02
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多