【问题标题】:java logback different log level for different tenantsjava logback 不同租户的不同日志级别
【发布时间】:2021-03-31 02:29:49
【问题描述】:

目前我正在使用 logback MDC 来设置不同的租户。但我希望为不同的租户提供不同的日志级别。

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

    <appender name="TENANT-THREAD" class="ch.qos.logback.classic.sift.SiftingAppender">

        <discriminator>
            <key>tenantName</key>
            <defaultValue>MYAPP</defaultValue>
        </discriminator>

        <sift>

          <appender name="FILE-${tenantName}"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logPath}/${tenantName}.log</file>

            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <Pattern>
                    %d{yyyy-MM-dd HH:mm:ss} %mdc [%thread] %level %logger{35} - %msg%n
                </Pattern>
            </encoder>
          </appender>

        </sift>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="TENANT-THREAD"/>
    </root>
</configuration>


MDC.put("tenantName", tenantName);
MDC.remove("tenantName");

是否可以通过编程方式为不同的租户设置不同的日志级别?

【问题讨论】:

    标签: java logging log4j logback multi-tenant


    【解决方案1】:

    您可以使用以下步骤来实现相同的效果

    • 在 MDC 中设置租户名称
    • 提供扩展 ch.qos.logback.classic.turbo.DynamicThresholdFilter 的自定义过滤器
    • 使用您的过滤器 LoggerContext#getTurboFilterList#add 更新 TurboFilters

    希望对您有所帮助

    vp

    【讨论】:

      【解决方案2】:

      可以通过自定义TenantLogger包装记录器来完成以下步骤

      1. 获取记录器
      2. 根据模块和服务中的缓存从数据库表中获取租户日志配置。
      3. 根据从数据库获取的配置,根据级别记录消息(步骤 2)
      4. 如果没有为租户配置相应的级别,可以跳过日志中的消息

      这需要一个单独的表,如 TenantLoggingConfig,其中包含 TenantIdModuleIdLogLevel 等列。

      您可以拥有客户、订单、产品等模块。对于微服务,这很简单,因为每个微服务仅包含其模块。

      请分享您对此的想法,或者如果您更喜欢任何替代方法。

      【讨论】:

        【解决方案3】:

        要以编程方式更改日志级别,请使用:

        Logger root = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
        root.setLevel(Level.INFO);
        

        Level.INFO 被选中的级别

        【讨论】:

        • 这不会改变所有租户的日志级别吗?
        • 这将更改所有日志级别。我只想更改特定租户的日志级别
        猜你喜欢
        • 2019-05-13
        • 2015-11-25
        • 2023-02-17
        • 2021-03-01
        • 1970-01-01
        • 2019-02-02
        • 1970-01-01
        • 1970-01-01
        • 2019-09-20
        相关资源
        最近更新 更多