【问题标题】:filter markers in logback在 logback 中过滤标记
【发布时间】:2018-03-06 05:28:48
【问题描述】:

我有关于 scala 的项目。 我使用这个库进行日志记录 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 - ++++

现在我有一个问题:

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

【问题讨论】:

  • 这可能是因为,您创建记录器和记录的类名或包名是test。所以它优先于根记录器

标签: scala logging logback


【解决方案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. 您的文件不是以&lt;configuration&gt; 开头并以&lt;/configuration&gt; 结尾

  2. 过滤器不在正确的命名空间中。它们应该在&lt;configuration&gt; 下(与附加程序相同级别)。

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

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

  5. 始终小心关卡。我将级别设置为DEBUG

正确设置配置后,只需将&lt;onMatch&gt; 属性更改为ALLOW,如果您希望记录器打印它,或者如果您不想,则更改为DENY。只需将两者都设置为ALLOW 将导致打印所有标记,另一方面,如果将它们都设置为DENY,则不会打印这些标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 2023-02-22
    • 2016-09-07
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多