【问题标题】:Java's application in container. TRACE logs level enable from consoleJava 在容器中的应用程序。从控制台启用 TRACE 日志级别
【发布时间】:2021-04-26 22:12:16
【问题描述】:

在我的应用中,我使用的是 slf4j java logger。

       <slf4j.version>1.7.10</slf4j.version>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

哪个有配置

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="30 seconds">
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

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

    <appender name="FILE-ERRORS" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
        <file>/logs/errors.log</file>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>errors%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
    </appender>

    <logger name="com.company" level="DEBUG"/>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

示例代码

public class SomeClass {
  private static final Logger LOGGER = getLogger(SomeClass.class);
    
  private void process() {
        LOGGER.trace("Processing...");
        if (!Strings.isEmpty("empty")) {
            LOGGER.debug("not empty");
            LOGGER.info("not empty");
            LOGGER.error("not empty");
            LOGGER.warn("not empty");
            execute("action");
        }
    }
}

我试图找到一些方法来显示 TRACE 日志级别,但在运行容器上。实际上,如果我想只显示日志类型。

docker logs -f  [container-name] --tail 500

然后我可以在没有 TRACE 的情况下看到 INFO、ERROR、WARN、DEBUG 级别

我想知道是否存在一些工具或命令来显示 TRACE 级别?例如。

docker logs -f  [container-name] --tail 500 | cmdTraceLevelTool

我知道如何启用 TRACE 级别,使用 logback-spring.xml 或 application.properties 文件,但我都知道如何永久启用它,并且它们已经编码。我正在从控制台,在运行时,在工作的应用程序上寻找一些东西。 我想有一个选择,全部或不使用 TRACE。有可能吗?

【问题讨论】:

  • 如果您的应用程序支持 JMX,您应该能够向您的应用程序发送命令,并且可以通过这种方式更改调试级别。 IE。如果您有一个 spring-boot 应用程序并使用 spring-boot-admin,那么一旦安全配置正确完成,就有一种相当简单的方法来更改通过 spring-boot-admin 的 Web 界面生成的日志级别。这应该会给你足够的指导来做进一步的研究

标签: java docker logging trace


【解决方案1】:

应用程序不负责写入日志文件。因此,您必须通知应用程序也附加 TRACE 日志。 Docker 无法通过命令为您做到这一点。 Docker 控制容器的功能和执行方式。它无法控制在容器内运行的应用程序是如何工作的。

从我能想到的最接近你想要的,是以下。在 logback-spring.xml 中启用TRACE 日志,然后使用以下命令在控制台中读取特定日志。

docker logs -f  [container-name] --tail 500 | grep 'TRACE'

它将从所有日志中过滤所有包含单词TRACE的行。

【讨论】:

  • 谢谢。对于答案和具体信息。我用 grep 知道这种方式,但这仍然不能解决我的问题。嗯,我想知道这是完全可能的,阅读你的帖子。可能有人会为我找到一些东西。
  • @Mbded 一旦应用程序启动,它会读取文件 logback.xml 并在应用程序运行时遵循这些规则。 Docker 不能中断应用程序。这是一个应用程序。 Docker 只是提供应用程序运行的环境。即使您修改了 logback.xml,应用程序也必须重新启动。码头上什么都没有。这就是应用程序的工作方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多