Top Description Fields Constructors Methods
ch.qos.logback.classic.turbo

public Class DynamicThresholdFilter

extends TurboFilter
Class Inheritance
Imports
ch.qos.logback.classic.Logger, .Level, ch.qos.logback.core.spi.FilterReply, org.slf4j.Marker, .MDC, java.util.Map, .HashMap

This filter allows for efficient course grained filtering based on criteria such as product name or company name that would be associated with requests as they are processed.

This filter will allow you to associate threshold levels to a key put in the MDC. This key can be any value specified by the user. Furthermore, you can pass MDC value and level threshold associations, which are then looked up to find the level threshold to apply to the current logging request. If no level threshold could be found, then a 'default' value specified by the user is applied. We call this value 'levelAssociatedWithMDCValue'.

If 'levelAssociatedWithMDCValue' is higher or equal to the level of the current logger request, the decide() method returns the value of onHigherOrEqual, if it is lower than the value of onLower is returned. Both 'onHigherOrEqual' and 'onLower' can be set by the user. By default, 'onHigherOrEqual' is set to NEUTRAL and 'onLower' is set to DENY. Thus, if the current logger request's level is lower than 'levelAssociatedWithMDCValue', then the request is denied, and if it is higher or equal, then this filter decides NEUTRAL letting subsequent filters to make the decision on the fate of the logging request.

The example below illustrates how logging could be enabled for only individual users. In this example all events for logger names matching "com.mycompany" will be logged if they are for 'user1' and at a level higher than equals to DEBUG, and for 'user2' if they are at a level higher than or equal to TRACE, and for other users only if they are at level ERROR or higher. Events issued by loggers other than "com.mycompany" will only be logged if they are at level ERROR or higher since that is all the root logger allows.

<configuration>
  <appender name="STDOUT"
            class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>TEST %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
    </layout>
  </appender>

  <turboFilter class="ch.qos.logback.classic.turbo.DynamicThresholdFilter">
    <Key>userId</Key>
    <DefaultThreshold>ERROR</DefaultThreshold>
    <MDCValueLevelPair>
      <value>user1</value>
      <level>DEBUG</level>
    </MDCValueLevelPair>
    <MDCValueLevelPair>
      <value>user2</value>
      <level>TRACE</level>
    </MDCValueLevelPair>
  </turboFilter>

  <logger name="com.mycompany" level="TRACE"/>

  <root level="ERROR" >
    <appender-ref ref="STDOUT" />
  </root>
</configuration>
In the next configuration events from user1 and user2 will be logged regardless of the logger levels. Events for other users and records without a userid in the MDC will be logged if they are ERROR level messages. With this configuration, the root level is never checked since DynamicThresholdFilter will either accept or deny all records.
<configuration>
  <appender name="STDOUT"
            class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
       <Pattern>TEST %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
    </layout>
  </appender>

  <turboFilter class="ch.qos.logback.classic.turbo.DynamicThresholdFilter">
    <Key>userId</Key>
    <DefaultThreshold>ERROR</DefaultThreshold>
    <OnHigherOrEqual>ACCEPT</OnHigherOrEqual>
    <OnLower>DENY</OnLower>
    <MDCValueLevelPair>
      <value>user1</value>
      <level>TRACE</level>
    </MDCValueLevelPair>
    <MDCValueLevelPair>
      <value>user2</value>
      <level>TRACE</level>
    </MDCValueLevelPair>
  </turboFilter>

  <root level="DEBUG" >
    <appender-ref ref="STDOUT" />
  </root>
</configuration>
Authors
Ralph Goers, Ceki Gülcü

Field Summary

Modifier and TypeField and Description
private Level
private String
private FilterReply
private FilterReply
private Map<String, Level>
Inherited from ch.qos.logback.classic.turbo.TurboFilter:
start

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public void
addMDCValueLevelPair(MDCValueLevelPair mdcValueLevelPair)

Add a new MDCValuePair

public FilterReply

Returns:

FilterReply - this filter's decision
decide
(Marker marker, Logger logger, Level level, String s, Object[] objects, Throwable throwable)

Implements abstract ch.qos.logback.classic.turbo.TurboFilter.decide.

This method first finds the MDC value for 'key'.
public Level

Returns:

the default threshold value in the absence of a set MDC key
getDefaultThreshold
()

Get the default threshold value when the MDC key is not set.

public String

Returns:

the name of the MDC key.
getKey
()

Get the MDC key whose value will be used as a level threshold

public FilterReply

Returns:

FilterReply
getOnHigherOrEqual
()

Get the FilterReply when the effective level is higher or equal to the level of current logging request

public FilterReply

Returns:

FilterReply
getOnLower
()

Get the FilterReply when the effective level is lower than the level of current logging request

public void
setDefaultThreshold(Level defaultThreshold)

public void
public void
public void
public void
Inherited from ch.qos.logback.classic.turbo.TurboFilter:
getNameisStartedsetNamestop

Field Detail

defaultThresholdback to summary
private Level defaultThreshold
keyback to summary
private String key
onHigherOrEqualback to summary
private FilterReply onHigherOrEqual
onLowerback to summary
private FilterReply onLower
valueLevelMapback to summary
private Map<String, Level> valueLevelMap

Constructor Detail

DynamicThresholdFilterback to summary
public DynamicThresholdFilter()

Method Detail

addMDCValueLevelPairback to summary
public void addMDCValueLevelPair(MDCValueLevelPair mdcValueLevelPair)

Add a new MDCValuePair

decideback to summary
public FilterReply decide(Marker marker, Logger logger, Level level, String s, Object[] objects, Throwable throwable)

Implements abstract ch.qos.logback.classic.turbo.TurboFilter.decide.

This method first finds the MDC value for 'key'. It then finds the level threshold associated with this MDC value from the list of MDCValueLevelPair passed to this filter. This value is stored in a variable called 'levelAssociatedWithMDCValue'. If it is null, then it is set to the

Returns:FilterReply

FilterReply - this filter's decision

Annotations
@Override
getDefaultThresholdback to summary
public Level getDefaultThreshold()

Get the default threshold value when the MDC key is not set.

Returns:Level

the default threshold value in the absence of a set MDC key

getKeyback to summary
public String getKey()

Get the MDC key whose value will be used as a level threshold

Returns:String

the name of the MDC key.

getOnHigherOrEqualback to summary
public FilterReply getOnHigherOrEqual()

Get the FilterReply when the effective level is higher or equal to the level of current logging request

Returns:FilterReply

FilterReply

getOnLowerback to summary
public FilterReply getOnLower()

Get the FilterReply when the effective level is lower than the level of current logging request

Returns:FilterReply

FilterReply

setDefaultThresholdback to summary
public void setDefaultThreshold(Level defaultThreshold)
setKeyback to summary
public void setKey(String key)
See Also
setKey
setOnHigherOrEqualback to summary
public void setOnHigherOrEqual(FilterReply onHigherOrEqual)
setOnLowerback to summary
public void setOnLower(FilterReply onLower)
startback to summary
public void start()

Overrides ch.qos.logback.classic.turbo.TurboFilter.start.

Implements ch.qos.logback.core.spi.LifeCycle.start.

Annotations
@Override