java logback不同租户的不同日志级别

r7s23pms  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(381)

目前我正在使用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");

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

pcww981p

pcww981p1#

通过将记录器 Package 到自定义 TenantLogger 把记录器拿来
根据服务中的模块和缓存,从数据库表中获取租户日志配置。
根据从数据库获得的配置,根据级别记录消息(步骤2)
如果没有为租户配置相应的级别,则可以从日志记录中跳过该消息
这需要一张单独的table TenantLoggingConfig 其中包含如下列 TenantId , ModuleId , LogLevel 等。
您可以拥有诸如客户、订单、产品等模块。对于微服务,这很简单,因为每个微服务只包含其模块。
请分享您对此的想法,或者如果您喜欢任何其他方法。

uklbhaso

uklbhaso2#

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

Logger root = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
root.setLevel(Level.INFO);
``` `Level.INFO` 作为所选级别

相关问题