【问题标题】:how to specify specific logger level for each of file writing and console writing如何为每个文件写入和控制台写入指定特定的记录器级别
【发布时间】:2018-12-19 00:29:37
【问题描述】:

我想在我的 logfile.log 中维护一个只有 WARN、ERROR 和 FATAL 的日志,而希望在我的 Spring Boot 应用程序中将上述所有 INFO 写入控制台。我看到当我执行log.level.root=WARN 时,在application.properties 文件中它为整个应用程序设置了一个WARN 日志级别。我该怎么做才能在控制台中显示所有日志消息,但只在文件中写入 WARN 以上的消息?

还有!!!! 有没有办法将级别设置为 INFO 并仅在文件中写入某些指定的日志。例如。我想用 INFO 级别跟踪日志中的每一个登录/注销/文件更改(比如业务逻辑相关),但不想看到在应用程序启动期间弹出的默认 INFO 消息,例如

2018-07-11 10:19:00.554 INFO 11190 --- [ main] c.v.guruji.GurujiApplication : Started GurujiApplication in 10.307 seconds (JVM running for 11.029) .

【问题讨论】:

    标签: spring-boot logging logfactory


    【解决方案1】:

    答案取决于您计划使用的实际日志记录框架, spring boot 与其中大多数集成。

    一般来说,如果您选择“零配置”,请在 Spring Boot 配置文件 (application.properties / yaml) 中使用以下行指定事件级别:

    logging.level.com.myorg=DEBUG
    logging.level.root=INFO
    

    如果你想写入文件,或者一般来说提供更灵活的配置,你需要配置一个叫做 appender 的东西,但这不是 Spring Boot 的概念,而是一个日志框架术语。

    所以实际配置将取决于特定的日志记录框架,通常人们将 XML 配置文件(如果使用 logback,则为 logback.xml)放入 src/main/resources 文件夹,它可以工作。另一个现代选项是 log4j2 框架。

    从问题看来,您最好先了解如何使用这些框架,然后尝试将它们集成到 Spring Boot 中,它们中的每一个都非常灵活,并且会提供您正在寻找的解决方案

    • Here 是有关如何在 Spring Boot 中使用每个框架的教程的链接

    • Here是spring boot官方文档的日志章节

    【讨论】:

      【解决方案2】:

      嗯,我浏览了一些 logback 文档,并且几乎想出了该怎么做。

      我将此代码发布给其他会遇到像我这样的问题的人以供快速参考。

      但我建议首先阅读适当的文档以清楚地理解它。

      logback.xml(用于将每个级别的日志记录在单独的文件中并在控制台中显示)

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

      <property name="DEV_HOME" value="logs" />
      
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
          <layout class="ch.qos.logback.classic.PatternLayout">
              <Pattern>
                  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
              </Pattern>
          </layout>
      </appender>
      
      
      
      <appender name="FILE-ERROR"
                class="ch.qos.logback.core.rolling.RollingFileAppender">
          <file>${DEV_HOME}/error.log</file>
          <filter class="ch.qos.logback.classic.filter.LevelFilter">
              <level>ERROR</level>
              <onMatch>ACCEPT</onMatch>
              <onMismatch>DENY</onMismatch>
          </filter>
          <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
              <Pattern>
                  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
              </Pattern>
          </encoder>
      
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
              <!-- rollover daily -->
              <fileNamePattern>${DEV_HOME}/archived/error.%d{yyyy-MM-dd}.%i.log
              </fileNamePattern>
              <timeBasedFileNamingAndTriggeringPolicy
                      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                  <maxFileSize>10MB</maxFileSize>
              </timeBasedFileNamingAndTriggeringPolicy>
          </rollingPolicy>
      
      </appender>
      
      
      
      <appender name="FILE-INFO"
                class="ch.qos.logback.core.rolling.RollingFileAppender">
          <file>${DEV_HOME}/info.log</file>
          <filter class="ch.qos.logback.classic.filter.LevelFilter">
              <level>INFO</level>
              <onMatch>ACCEPT</onMatch>
              <onMismatch>DENY</onMismatch>
          </filter>
          <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
              <Pattern>
                  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
              </Pattern>
          </encoder>
      
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
              <!-- rollover daily -->
              <fileNamePattern>${DEV_HOME}/archived/info.%d{yyyy-MM-dd}.%i.log
              </fileNamePattern>
              <timeBasedFileNamingAndTriggeringPolicy
                      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                  <maxFileSize>10MB</maxFileSize>
              </timeBasedFileNamingAndTriggeringPolicy>
          </rollingPolicy>
      
      </appender>
      
      
      
      <appender name="FILE-FATAL"
                class="ch.qos.logback.core.rolling.RollingFileAppender">
          <file>${DEV_HOME}/fatal.log</file>
          <filter class="ch.qos.logback.classic.filter.LevelFilter">
              <level>FATAL</level>
              <onMatch>ACCEPT</onMatch>
              <onMismatch>DENY</onMismatch>
          </filter>
          <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
              <Pattern>
                  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
              </Pattern>
          </encoder>
      
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
              <!-- rollover daily -->
              <fileNamePattern>${DEV_HOME}/archived/fatal.%d{yyyy-MM-dd}.%i.log
              </fileNamePattern>
              <timeBasedFileNamingAndTriggeringPolicy
                      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                  <maxFileSize>10MB</maxFileSize>
              </timeBasedFileNamingAndTriggeringPolicy>
          </rollingPolicy>
      
      </appender>
      
      
      <appender name="FILE-WARN"
                class="ch.qos.logback.core.rolling.RollingFileAppender">
          <file>${DEV_HOME}/warn.log</file>
          <filter class="ch.qos.logback.classic.filter.LevelFilter">
              <level>WARN</level>
              <onMatch>ACCEPT</onMatch>
              <onMismatch>DENY</onMismatch>
          </filter>
          <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
              <Pattern>
                  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
              </Pattern>
          </encoder>
      
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
              <!-- rollover daily -->
              <fileNamePattern>${DEV_HOME}/archived/warn.%d{yyyy-MM-dd}.%i.log
              </fileNamePattern>
              <timeBasedFileNamingAndTriggeringPolicy
                      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                  <maxFileSize>10MB</maxFileSize>
              </timeBasedFileNamingAndTriggeringPolicy>
          </rollingPolicy>
      
      </appender>
      
      
      <!-- Send logs to both console and file audit -->
      
      <logger name="com.vaidiksanatansewa.guruji" level="fatal"
              additivity="false">
      
          <appender-ref ref="FILE-FATAL" />
      </logger>
      
      
      <logger name="com.vaidiksanatansewa.guruji" level="error"
              additivity="false">
      
          <appender-ref ref="FILE-ERROR" />
      </logger>
      
      
      <logger name="com.vaidiksanatansewa.guruji" level="warn"
              additivity="false">
      
          <appender-ref ref="FILE-WARN" />
      </logger>
      
      
      <logger name="com.vaidiksanatansewa.guruji" level="info"
              additivity="false">
      
          <appender-ref ref="FILE-INFO" />
      </logger>
      
      <root level="INFO">
          <appender-ref ref="STDOUT" />
      </root>
      

      【讨论】:

        猜你喜欢
        • 2018-12-23
        • 2017-10-15
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多