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

时间:2016-06-08 06:12:08

标签: java logging logback appender

我正在使用logback进行日志记录和logback.xml  控制台appender为

<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.
  

为什么?我想通过定义loglevel轻松过滤消息   或其他一些指标。

例如:搜索日志级别为&#34; CUSTOMLOGLEVEL&#34;的日志。 有没有办法给自定义日志级别或任何其他指示器,表明这是自定义生成的日志而不是一些框架生成的日志..

我开始创建自定义类的方向。

<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>

但我不确定如何在外部输入这些参数。

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

1 个答案:

答案 0 :(得分:5)

SLF4J / Logback解决了问题&#34;我想做一些比日志级更复杂的事情&#34;有一个名为Markers的功能。

例如,将某些日志标记为&#34;有趣&#34;:

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中关于为什么他们没有&#34;致命&#34;水平以及如何使用标记。

另一种选择(因为您特别询问过滤以查看它是否是自定义生成的日志,而不是某些框架生成的日志&#34;)是为了确保您的自定义日志都是在记录器中命名你想要的东西(可能以com.yourcompany.custom.开头),并且只使用正常的记录器过滤。虽然记录器以他们所在的课程命名通常非常方便,但有时为不同的记录器使用不同的名称可以更准确地表示您尝试记录的内容,并且可以轻松实现过滤和搜索。