有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java logback配置文件将除调试之外的所有内容写入文件,作为登录到控制台

我正在尝试为我的eclipse配置logback和slf4j。然而,我对配置文件有点困惑。我只希望日志输出应该同时写入cosole和文件,但只有调试信息应该关闭才能写入文件。因此,我写了一些配置文件,但它很烂,甚至不工作。不管怎样,我怎样才能实现这个愿望

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="com.lordofthejars.foo" level="INFO" additivity="false">
   <appender-ref ref="STDOUT" />
  </logger>

  <root level="DEBUG">          
    <appender-ref ref="STDOUT" />
  </root>  

</configuration>

共 (2) 个答案

  1. # 1 楼答案

    您应该为fileappender设置要调试的级别筛选器

    <configuration>
    
         <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
            </encoder>
         </appender>
    
         <appender name="fileAppender1" class="ch.qos.logback.core.FileAppender">
           <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <file>c:/logs/kplogback.log</file>
            <append>true</append>
            <encoder>
                <pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="DEBUG">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="fileAppender1" />
        </root>
    
    </configuration>
    
  2. # 2 楼答案

    您应该使用ThresholdFilter过滤器:

    The ThresholdFilter filters events below the specified threshold. For events of level equal or above the threshold, ThresholdFilter will respond NEUTRAL when its decide() method is invoked. However, events with a level below the threshold will be denied

    文件:https://logback.qos.ch/manual/filters.html#thresholdFilter

    例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
          <file>app.log </file>
          <append>true</append>
          <encoder>
             <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
          </encoder>
    
          <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
          </filter>
        </appender>
    
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
    
            <encoder>
                <pattern>%msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="debug">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
    </configuration>