当前位置: 首页 > 知识库问答 >
问题:

如何在日志回滚中禁用记录器.xml

戚良弼
2023-03-14

我正在使用logback。设置日志环境的xml文件。这里我有两个附加器,一个用于控制台,另一个用于文件。控制台appender将始终打印值,但需要时需要打开文件appender。

以下是我的配置,其中两个追加器STDOUT和文件以及两者都被添加根。我想要控制文件追加器日志,并且当我将级别值从OFF更改为其他值时,只有它应该工作。目前,如果更改级别 OFF,则停止两个追加器,并且无法在控制台上看到任何内容。

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

  <appender name="file" class="ch.qos.logback.core.FileAppender">
    <file>/tmp/logback.log</file>
    <append>true</append>
    <immediateFlush>true</immediateFlush>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
      </pattern>
    </encoder>
  </appender>

  <logger name="com.demo" level="OFF">
    <appender-ref ref="file" />
  </logger>

  <root level="info">
    <appender-ref ref="file" />
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

下面是java代码。

package com.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
    static Logger loger = LoggerFactory.getLogger(Main.class);
    
    public static void main(String args[]) {
      loger.info(System.getenv("LOGFILE"));
      loger.info("hello");
    }
}

共有1个答案

太叔何平
2023-03-14
<logger name="com.demo" level="OFF">

上述标记中的< code>level = "OFF"将< code>root级别的< code>"com.demo"的日志级别< code>info覆盖为< code>"OFF"

以更简单的方式,当我们将level=“OFF”声明到特定记录器时,记录器级别在整个应用程序中将是OFF的,并且没有附加器可以为它打印日志。

因此,根据我的理解,最好的解决方案是使用如下评论:

案例1:

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

  <appender name="file" class="ch.qos.logback.core.FileAppender">
    <file>logback.log</file>
    <append>true</append>
    <immediateFlush>true</immediateFlush>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
      </pattern>
    </encoder>
  </appender>
  <root level="info">
    <appender-ref ref="file" />
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

在这种情况下,日志将路由到控制台和文件。

案例2:

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

  <appender name="file" class="ch.qos.logback.core.FileAppender">
    <file>logback.log</file>
    <append>true</append>
    <immediateFlush>true</immediateFlush>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
      </pattern>
    </encoder>
  </appender>
  <root level="info">
    <!-- <appender-ref ref="file" /> -->
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

在这种情况下,日志将只路由到控制台,而不会路由到文件附加器。

解决方案2:

通过在日志.xml中借助If条件支持,我们可以实现它。

<root level="info">
    <appender-ref ref="STDOUT" />
    <if condition='property("FILE_APPENDER_ENABLED").contains("true")'>
        <then>
            <appender-ref ref="file" />
        </then>
    </if>
</root>

环境变量中配置此属性FILE_APPENDER_ENABLED,然后可以启用禁用文件追加器

可能是这个解决方案不适合您,但将来可能会对某人有用。

 类似资料:
  • 问题内容: 我有一些使用该软件包的工具化代码。现在该关闭日志记录了,我无法确定如何关闭标准记录器。 我错过了什么吗?我应该在进行日志调用之前检查标志,还是在生产中将其注释掉? 问题答案: 要完全禁用日志,最好调用Joril并将输出设置为无操作(例如) 但即使在此之后,操作仍将闲置约500-600 ns / op 1 这仍然可切断短路(左右 为100 ns / OP )通过使用自定义的实现,并实现所

  • 我试图在一个基于spring的项目中创建记录器策略。 我面临的问题与滚动政策有关。已创建logfile.log并且工作正常,但未创建滚动文件rollingfile.log.%d{yyyy-MM-dd}.log。

  • 问题内容: 我只是想在我的项目中禁用Restlet的日志到stdout / stderr,并通过org.restlet.ext.slf4j提供的SLF4J门面转发所有Restlet日志。是否有捷径可寻? 问题答案: 首先,您必须配置SLF4J来拦截Restlet对java.util.logging API的所有调用,并将它们映射到SLF4J Facade的API上的调用。您只需将jul-to- s

  • 这也许是一个很简单的问题。如何禁用Hikari-CP调试日志?在我的日志文件我有很多这样的消息 在我的日志4jconfig中。xml: 有人能告诉我记录器配置有什么问题吗? 谢谢!

  • 无需创建特定的配置。因为我使用而不必亲自配置日志记录。

  • 我在应用程序中使用Log4JV2.0Beta3进行日志记录,并且在运行单元测试时生成日志消息。我检查了API以确定将日志级别设置为关键级别的方法,但我找不到任何方法来更改日志程序配置。 事实上,我是在log4j2网站上读到的: