2017-09-25 68 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將導致打印所有標記,不會打印標記。