在logback中过滤标记

时间:2017-09-25 09:31:14

标签: scala logging logback

我有关于scala的项目。 我使用这个lib进行日志记录 https://github.com/typesafehub/scala-logging

我创建了记录器

import com.typesafe.scalalogging.Logger
val log                 = Logger(getClass)

和两个标记

    import org.slf4j.{Marker, MarkerFactory}
    private val marker: Marker = MarkerFactory.getMarker("DP")
    private val marker2: Marker = MarkerFactory.getMarker("ST")

我在我的控制器中使用登录

log.debug(marker, "----"
log.debug(marker2, "++++")

这是我的回归

    

<appender name="STDOUTTime" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%coloredLevel %logger{30} - %marker - %d{yyyy/MM/dd/HH:mm:ss.SSS/Z} - %message%n%xException{3}</pattern>
    </encoder>

    <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
        <Marker>DP</Marker>
        <OnMatch>DENY</OnMatch>
        <OnMismatch>DENY</OnMismatch>
    </turboFilter>

    <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
        <Marker>ST</Marker>
        <onMatch>DENY</onMatch>
        <onMismatch>DENY</onMismatch>
    </turboFilter>
</appender>

<logger name="ds.forwarding" level="DEBUG">
    <appender-ref ref="STDOUTTime"/>
</logger>

<root level="ERROR">

</root>

现在,当我运行我的控制器时,我在控制台输出:

[debug] d.f.c.a.s.InputStatisticController - DP - 2017/09/25/11:55:58.603/+0300 - ----
[debug] d.f.c.a.s.InputStatisticController - ST - 2017/09/25/11:55:58.603/+0300 - ++++

现在我有一个问题:

  • 为什么标记和标记2可见,为什么DENY不起作用?
  • 如何排除两个标记?
  • 如何只排除一个标记?

1 个答案:

答案 0 :(得分:1)

以下logback.xml拒绝DPST个标记。

<configuration>
    <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
        <Marker>DP</Marker>
        <OnMatch>DENY</OnMatch>
    </turboFilter>

    <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
        <Marker>ST</Marker>
        <onMatch>DENY</onMatch>
    </turboFilter>

    <appender name="STDOUTTime" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%coloredLevel %logger{30} - %marker - %d{yyyy/MM/dd/HH:mm:ss.SSS/Z} - %message%n%xException{3}</pattern>
        </encoder>

    </appender>

    <root level="DEBUG">
        <appender-ref ref="STDOUTTime"/>
    </root>  
</configuration>

您档案的错误:

  1. 您的文件不是以<configuration>开头,而是以</configuration>结尾

  2. 过滤器不在正确的命名空间中。它们应该在<configuration>下(与appender相同)。

  3. 在您的情况下无需使用<onMisMatch>标志。这可能会导致混淆。

  4. 由于您的记录器被命名为ds.forwarding,因此您必须确保在该类中调用该记录器。在您的情况下,您使用getClass方法调用记录器。在我的logback.xml文件中,我将appender添加到我的root记录器中。因此,通过Logger(getClass)方法调用它就足够了。

  5. 要小心水平。我将关卡设置为DEBUG

  6. 正确设置配置后,如果您希望记录器将其打印,只需将<onMatch>属性更改为ALLOW,如果不想,则将DENY更改为ALLOW。如果将两者都设置为DENY,只需将两者都设置为{{1}}将导致打印所有标记,则不会打印标记。