Logback - 布局模式中的自定义级别输入

Logback -custom level input in layout pattern

我正在使用 logback 进行日志记录,在 logback.xml 我有 控制台附加程序为

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>

              <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
    </appender>.

我正在努力实现这样的目标...

time  thread  |-**CUSTOMLOGLEVEL**  xyz.class - Message.

Why ? i want to filter the messages easily by defining the loglevel or some other indicator.

例如:搜索日志级别"CUSTOMLOGLEVEL"的日志。 有什么方法可以提供自定义日志级别或任何其他指示器,表明这是自定义生成的日志而不是某些框架生成的日志..

我进入了创建自定义 class 的方向。

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="com.logging.CustomLayout">
                             <param name="argument1" value="1" />
                             <param name="argument2" value="2" />

            </layout>
        </encoder>
    </appender>

但我不确定如何从外部为这些参数提供输入。

如果我不清楚,请告诉我。

SLF4J/Logback 使用称为标记的功能解决了 "I want to do something more complex than a log level" 的问题。

例如,将一些日志标记为"interesting":

Marker interesting = MarkerFactory.getMarker("INTERESTING");
Logger logger = LoggerFactory.getLogger(getClass());
…
logger.info(interesting, "Something happened: {}", value)

在PatternLayout中,可以使用%marker来记录与日志条目关联的标记。 (参见 %marker in the documentation。)

这与 a SLF4J FAQ entry 中关于为什么他们没有 "FATAL" 级别以及如何使用标记的内容相似。

另一个选项(因为你特别询问过滤以查看它是否是 "custom generated log and not some framework generated log")是确保你的自定义日志都在一个记录器中,该记录器的名称是你想要的(可能以 [= 开头) 12=]),并且只使用普通的记录器过滤。虽然让记录器以它们所在的 class 命名通常非常方便,但有时对不同的记录器使用不同的名称更准确地表示您尝试记录的内容,并允许轻松过滤和搜索嗯。