ADMIN logger 的 additivity=“false“ 配置,以及 root logger 没有配置 ADMIN appender

文章目录

      • 详细说明:
      • 总结:
  • 1、第一个Logback 配置文件
  • 2、第二个Logback 配置文件

以下是两个Logback配置文件的主要区别,用表格形式列出:

区别点 文件1 文件2
ADMIN Logger的additivity属性 additivity="false"(日志不会传递给父Logger) 未设置additivity属性(默认值为true,日志会传递给父Logger)
root Logger的appender-ref 仅包含FILEERRORFILEWARNFILEINFOSTDOUT 包含FILEERRORFILEWARNFILEINFOSTDOUTADMIN
INFO Appender的rollingPolicy配置 包含多余的>符号(> 无多余符号(
ADMIN Logger的配置 明确指定additivity="false" 未指定additivity属性,默认值为true

详细说明:

  1. ADMIN Logger的additivity属性

    • 文件1中,ADMIN Logger的additivity属性设置为false,表示日志不会传递给父Logger(即root Logger)。
    • 文件2中,ADMIN Logger未设置additivity属性,默认值为true,表示日志会传递给父Logger。
  2. root Logger的appender-ref

    • 文件1中,root Logger仅引用了FILEERRORFILEWARNFILEINFOSTDOUT
    • 文件2中,root Logger额外引用了ADMIN,这意味着ADMIN的日志会同时输出到ADMIN Appender和root Logger的其他Appender。
  3. INFO Appender的rollingPolicy配置

    • 文件1中,INFO Appender的rollingPolicy配置多了一个多余的>符号,这是一个语法错误。
    • 文件2中,INFO Appender的rollingPolicy配置正确,没有多余的符号。
  4. ADMIN Logger的配置

    • 文件1中,ADMIN Logger明确指定了additivity="false",确保日志不会传递给父Logger。
    • 文件2中,ADMIN Logger未指定additivity属性,日志会传递给父Logger。

总结:

  • 文件2的配置更合理,修复了文件1中的语法错误(多余的>符号)。
  • 文件2中ADMIN Logger的日志会传递给父Logger,而文件1中不会。
  • 文件2的root Logger额外引用了ADMIN Appender,可能会导致日志重复输出,具体取决于业务需求是否需要。

好的,明白了。如果你在控制台没有看到 loggerAdmin.info() 的日志,结合我们之前的分析,以及你提供的信息,我们可以更精确地定位问题:

问题核心:ADMIN logger 的 additivity="false" 配置,以及 root logger 没有配置 ADMIN appender。

以下是更详细的解释:

  1. ADMIN Logger 配置:

    • additivity="false": 如我们所说,这阻止了 loggerAdmin.info() 产生的日志事件传递到 root logger。
  2. root Logger 配置:

    • STDOUT appender 存在,但它不会接收 ADMIN logger 的日志,因为 ADMIN 日志没有传递到 root logger。

详细分析:

  1. 代码执行 loggerAdmin.info():

    • 生成一个 info 级别的日志事件。
    • 这个日志事件匹配到 name="ADMIN" 的 logger。
    • ADMIN logger 的 levelinfo,所以日志事件被接受。
    • 由于 additivity="false",日志事件不会传递给 root logger。
    • 日志事件被发送到 ADMIN logger 关联的 ADMIN appender。
  2. ADMIN Appender 的行为:

    • ADMIN appender 将日志写入到 admin_log.log 文件。
  3. root Logger 和 STDOUT Appender 的行为:

    • root logger 接收所有级别大于等于 info 的日志事件。
    • 但是!root logger 没有收到 ADMIN logger 的日志事件,因为它的 additivity 设置为 false
    • STDOUT appender 只会输出 root logger 收到的日志事件,而不会输出来自 ADMIN logger 的日志事件。

为什么在控制台看不到:

  • 控制台的输出是通过 STDOUT appender 实现的。
  • STDOUT appender 只会打印那些被 root logger 处理的日志事件。
  • loggerAdmin.info() 的日志事件不会传递到 root logger,因此不会通过 STDOUT appender 输出到控制台。

核心原因:

控制台输出和 admin_log.log 的输出是由不同的 appender 控制的,并且 ADMIN logger 设置了 additivity="false",导致日志只写入 admin_log.log 文件,不输出到控制台。

如何让日志在控制台显示?

你有以下几种方法可以选择:

  1. 修改 ADMIN logger 的 additivity 属性:

    • ADMIN logger 的 additivity 设置为 true (或者移除该属性,因为默认为 true)。
      <logger name="ADMIN" level="info" additivity="true">
          <appender-ref ref="ADMIN"/>
      logger>
      
    • 这样,loggerAdmin.info() 的日志事件会同时传递给 ADMIN appender 和 root logger,然后被 STDOUT appender 输出到控制台。
      • 注意: 修改此项可能会造成 admin_log.log 文件中的日志重复,因为日志会同时被 ADMIN appender和 root logger 的appender处理。
  2. 修改 root logger 配置,添加 ADMIN appender:

    • ADMIN appender 添加到 root logger。
      <root level="${LOG_LEVEL}">
          <appender-ref ref="FILEERROR"/>
          <appender-ref ref="FILEWARN"/>
          <appender-ref ref="FILEINFO"/>
          <appender-ref ref="STDOUT"/>
          <appender-ref ref="ADMIN"/>  
      root>
      
    • 这样,root logger 会接收所有级别大于等于 info 的日志事件,包括来自 ADMIN logger (并且additivity 属性为默认 true时) 的日志事件。同时,ADMIN appender 也会收到一份日志副本。
  3. 修改代码,使用 root logger:

  • 在代码中将 private static final Logger loggerAdmin = LoggerFactory.getLogger("ADMIN"); 修改为 private static final Logger logger = LoggerFactory.getLogger(YourClassName.class);
  • 将代码 loggerAdmin.info("保存识别点信息后,identificationPoint.getId(): {}", identificationPoint.getId()); 修改为 logger.info("保存识别点信息后,identificationPoint.getId(): {}", identificationPoint.getId());
  • 这样日志会走 root logger 的配置。

推荐的方法:

  • 通常来说,如果你想在控制台看到特定 logger 的日志,建议使用方法 1 或者 方法 2,也就是保持 ADMIN 日志输出的同时,也将其发送到控制台。
  • 如果仅仅为了在控制台输出,而不需要 admin_log.log 文件记录,那么方法3最简单,建议修改代码,使用root logger, 但通常不建议这么做。
  • 方法 2 可以让你控制哪些 appender 输出所有日志,哪些 appender 只输出特定 logger 的日志。

结论:

你之所以在控制台看不到 loggerAdmin.info() 的日志,是因为默认情况下它被 ADMIN logger 和 additivity="false" 配置隔离了。修改 Logback 配置(additivity 或者 将 appender添加到 root)可以解决这个问题。

希望这次的解释能够帮助你更好地理解问题的本质。 请告诉我你是否已经解决了这个问题!


1、第一个Logback 配置文件


<configuration>

    <property name="LOG_PATH" value="logs/productQualification/"/>
    <property name="LOG_LEVEL" value="info"/>

    
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}pattern>
            <charset>utf8charset>
        encoder>
    appender>

    
    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/error_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/error_log/error_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger Line:%-3L - %msg%npattern>
            <charset>utf-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>errorlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/warn_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/warn_log/warn_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger Line:%-3L - %msg%npattern>
            <charset>utf-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warnlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/info_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">>
            <fileNamePattern>${LOG_PATH}/info_log/info_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger Line:%-3L - %msg%npattern>
            <charset>utf-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>infolevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="WECHAT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/wechat_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/wechat_log/wechat_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    <appender name="ADMIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/admin_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/admin_log/admin_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    <appender name="ali" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/ali_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/ali_log/ali_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    
    <appender name="FRONTEND" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/frontend_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/frontend_log/frontend_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    
    <appender name="LIST_DETAIL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/listDetail_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/listDetail_log/listDetail_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    
    <logger name="com.o2o.api.config.wechat" level="info" additivity="false">
        <appender-ref ref="WECHAT"/>
    logger>
    <logger name="com.o2o.api.controller.wechat" level="info" additivity="false">
        <appender-ref ref="WECHAT"/>
    logger>
    <logger name="me.chanjar.weixin" level="debug" additivity="false">
        <appender-ref ref="WECHAT"/>
    logger>
    <logger name="com.github.binarywang" level="debug" additivity="false">
        <appender-ref ref="WECHAT"/>
    logger>

    
    <logger name="ADMIN" level="info" additivity="false">
        <appender-ref ref="ADMIN"/>
    logger>

    
    <logger name="ali" level="info" additivity="false">
        <appender-ref ref="ali"/>
    logger>

    
    <logger name="FRONTEND" level="info" additivity="false">
        <appender-ref ref="FRONTEND"/>
    logger>

    
    <logger name="LIST_DETAIL" level="info" additivity="false">
        <appender-ref ref="LIST_DETAIL"/>
    logger>

    <logger name="org.springframework" level="WARN"/>
    <logger name="org.hibernate" level="WARN"/>

    <root level="${LOG_LEVEL}">
        <appender-ref ref="FILEERROR"/>
        <appender-ref ref="FILEWARN"/>
        <appender-ref ref="FILEINFO"/>

        
        <appender-ref ref="STDOUT"/>
    root>
configuration>

2、第二个Logback 配置文件


<configuration>

    <property name="LOG_PATH" value="logs/productQualification/"/>
    <property name="LOG_LEVEL" value="info"/>

    
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}pattern>
            <charset>utf8charset>
        encoder>
    appender>

    
    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/error_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/error_log/error_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger Line:%-3L - %msg%npattern>
            <charset>utf-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>errorlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/warn_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/warn_log/warn_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger Line:%-3L - %msg%npattern>
            <charset>utf-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warnlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/info_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/info_log/info_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger Line:%-3L - %msg%npattern>
            <charset>utf-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>infolevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="WECHAT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/wechat_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/wechat_log/wechat_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    <appender name="ADMIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/admin_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/admin_log/admin_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    <appender name="ali" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/ali_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/ali_log/ali_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    
    <appender name="FRONTEND" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/frontend_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/frontend_log/frontend_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    
    <appender name="LIST_DETAIL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/listDetail_log.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/listDetail_log/listDetail_log.%d{yyyy-MM-dd}.logfileNamePattern>
            <maxHistory>60maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <append>trueappend>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%npattern>
            <charset>utf-8charset>
        encoder>
    appender>

    
    <logger name="com.o2o.api.config.wechat" level="info" additivity="false">
        <appender-ref ref="WECHAT"/>
    logger>
    <logger name="com.o2o.api.controller.wechat" level="info" additivity="false">
        <appender-ref ref="WECHAT"/>
    logger>
    <logger name="me.chanjar.weixin" level="debug" additivity="false">
        <appender-ref ref="WECHAT"/>
    logger>
    <logger name="com.github.binarywang" level="debug" additivity="false">
        <appender-ref ref="WECHAT"/>
    logger>

    
    <logger name="ADMIN" level="info">
        <appender-ref ref="ADMIN"/>
    logger>

    
    <logger name="ali" level="info" additivity="false">
        <appender-ref ref="ali"/>
    logger>

    
    <logger name="FRONTEND" level="info" additivity="false">
        <appender-ref ref="FRONTEND"/>
    logger>

    
    <logger name="LIST_DETAIL" level="info" additivity="false">
        <appender-ref ref="LIST_DETAIL"/>
    logger>

    <logger name="org.springframework" level="WARN"/>
    <logger name="org.hibernate" level="WARN"/>

    <root level="${LOG_LEVEL}">
        <appender-ref ref="FILEERROR"/>
        <appender-ref ref="FILEWARN"/>
        <appender-ref ref="FILEINFO"/>

        
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ADMIN"/>
    root>
configuration>

ADMIN logger 的 additivity=“false“ 配置,以及 root logger 没有配置 ADMIN appender_第1张图片

你可能感兴趣的:(Spring,Data,JPA,java,前端,服务器)