Skip to content

Instantly share code, notes, and snippets.

@kushti
Created August 3, 2015 13:15
Show Gist options
  • Save kushti/4b1f10030882413ed5a4 to your computer and use it in GitHub Desktop.
Save kushti/4b1f10030882413ed5a4 to your computer and use it in GitHub Desktop.
Threshold + Logger filter for Logback in Scala
package smartcontract.utils
import ch.qos.logback.classic.Level
import ch.qos.logback.classic.spi.ILoggingEvent
import ch.qos.logback.core.filter.Filter
import ch.qos.logback.core.spi.FilterReply
/**
* Code rewritten from Java source
* found on http://stackoverflow.com/questions/10734025/logback-two-appenders-multiple-loggers-different-levels
*/
class ThresholdLoggerFilter extends Filter[ILoggingEvent] {
private var level: Level = _
private var logger: String = _
override def decide(event: ILoggingEvent): FilterReply = {
if (!isStarted) {
FilterReply.NEUTRAL
} else if (!event.getLoggerName.startsWith(logger)) {
FilterReply.DENY
} else if (event.getLevel.isGreaterOrEqual(level)) {
FilterReply.NEUTRAL
} else {
FilterReply.DENY
}
}
def setLevel(level: Level) {
this.level = level
}
def setLogger(logger: String) {
this.logger = logger
}
override def start() {
if (this.level != null && this.logger != null) {
super.start()
}
}
}
@Araeos
Copy link

Araeos commented Dec 4, 2017

If I understand this implementation correctly, then this filter only allows Loggers that begin with logger as all other loggers result in DENY. This would make using this filter for multiple loggers impossible:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>INFO</level>
  </filter>
  <filter class="smartcontract.utils.ThresholdLoggerFilter">
    <logger>org.springframework</logger>
    <level>ERROR</level>
  </filter>
  <filter class="smartcontract.utils.ThresholdLoggerFilter">
    <logger>org.example</logger>
    <level>INFO</level>
  </filter>
</appender>

Here both filters mutually exclude each other.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment