2017-09-25 100 views
0

我在scala上有项目。 我用这个lib中记录 https://github.com/typesafehub/scala-logginglogback中的过滤器标记

我创造记录

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, "++++") 

这是我的logback

<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不起作用?
  • 如何排除两个标记?
  • 如何排除只有一个标记?
+0

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

回答

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

一旦你正确设置的配置,简单地改变<onMatch>属性ALLOW如果你想记录打印出来,或者DENY如果你不这样做。如果将两者均设置为DENY,则只需将两者都设置为ALLOW将导致打印所有标记,不会打印标记。