Skip to content

Instantly share code, notes, and snippets.

@reikje
Created January 26, 2017 10:48
package com.github.rschatz
import com.twitter.finagle.context.Contexts
import com.twitter.io.{Buf, Charsets}
import com.twitter.util.Try
import com.github.rschatz.LogLevelName.LogLevelName
/**
* Encapsulates the name of a log level override.
*
* @author rschatz
*/
case class LogLevelOverride(logLevelName: LogLevelName) {
def let[T](f: => T): T = Contexts.broadcast.let(LogLevelOverride, this)(f)
}
object LogLevelName extends Enumeration {
type LogLevelName = Value
val TRACE, DEBUG, INFO, WARN, ERROR = Value
}
object LogLevelOverride extends Contexts.broadcast.Key[LogLevelOverride]("com.github.rschatz.LogLevelOverride") {
def current: Option[LogLevelOverride] = Contexts.broadcast.get(LogLevelOverride)
override def marshal(logLevelOverride: LogLevelOverride): Buf = {
Buf.ByteArray.Owned(logLevelOverride.logLevelName.toString.getBytes(Charsets.Utf8))
}
override def tryUnmarshal(buf: Buf): Try[LogLevelOverride] = {
Try {
val bytes = Buf.ByteArray.Owned.extract(buf)
LogLevelOverride(LogLevelName.withName(new String(bytes, Charsets.Utf8)))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment