Skip to content

Commit

Permalink
add methods with Marker
Browse files Browse the repository at this point in the history
  • Loading branch information
pekd-ltq committed Oct 8, 2020
1 parent a1fc110 commit 946701f
Show file tree
Hide file tree
Showing 3 changed files with 136 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/main/scala/org/slf4s/Logger.scala
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
package org.slf4s

import org.slf4j.{Logger => Underlying}
import org.slf4j.{Logger => Underlying, Marker}

class Logger(val underlying: Underlying) {
def trace(msg: String): Unit = macro LoggerMacro.trace
def trace(msg: String, t: Throwable): Unit = macro LoggerMacro.traceT
def trace(marker: Marker, msg: String): Unit = macro LoggerMacro.traceM
def trace(marker: Marker, msg: String, t: Throwable): Unit = macro LoggerMacro.traceMT
def debug(msg: String): Unit = macro LoggerMacro.debug
def debug(msg: String, t: Throwable): Unit = macro LoggerMacro.debugT
def debug(marker: Marker, msg: String): Unit = macro LoggerMacro.debugM
def debug(marker: Marker, msg: String, t: Throwable): Unit = macro LoggerMacro.debugMT
def info(msg: String): Unit = macro LoggerMacro.info
def info(msg: String, t: Throwable): Unit = macro LoggerMacro.infoT
def info(marker: Marker, msg: String): Unit = macro LoggerMacro.infoM
def info(marker: Marker, msg: String, t: Throwable): Unit = macro LoggerMacro.infoMT
def warn(msg: String): Unit = macro LoggerMacro.warn
def warn(msg: String, t: Throwable): Unit = macro LoggerMacro.warnT
def warn(marker: Marker, msg: String): Unit = macro LoggerMacro.warnM
def warn(marker: Marker, msg: String, t: Throwable): Unit = macro LoggerMacro.warnMT
def error(msg: String): Unit = macro LoggerMacro.error
def error(msg: String, t: Throwable): Unit = macro LoggerMacro.errorT
def error(marker: Marker, msg: String): Unit = macro LoggerMacro.errorM
def error(marker: Marker, msg: String, t: Throwable): Unit = macro LoggerMacro.errorMT
}

object Logger {
Expand Down
61 changes: 61 additions & 0 deletions src/main/scala/org/slf4s/LoggerMacro.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.slf4s

import scala.reflect.macros.blackbox.Context
import org.slf4j.Marker

private object LoggerMacro {
def trace(c: Context { type PrefixType = Logger })(msg: c.Expr[String]): c.universe.Tree = {
Expand All @@ -15,6 +16,18 @@ private object LoggerMacro {
q"if ($underlying.isTraceEnabled) $underlying.trace($msg, $t)"
}

def traceM(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isTraceEnabled(marker)) $underlying.trace($marker, $msg)"
}

def traceMT(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String], t: c.Expr[Throwable]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isTraceEnabled(marker)) $underlying.trace($marker, $msg, $t)"
}

def debug(c: Context { type PrefixType = Logger })(msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
Expand All @@ -27,6 +40,18 @@ private object LoggerMacro {
q"if ($underlying.isDebugEnabled) $underlying.debug($msg, $t)"
}

def debugM(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isDebugEnabled(marker)) $underlying.debug($marker, $msg)"
}

def debugMT(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String], t: c.Expr[Throwable]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isDebugEnabled(marker)) $underlying.debug($marker, $msg, $t)"
}

def info(c: Context { type PrefixType = Logger })(msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
Expand All @@ -39,6 +64,18 @@ private object LoggerMacro {
q"if ($underlying.isInfoEnabled) $underlying.info($msg, $t)"
}

def infoM(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isInfoEnabled(marker)) $underlying.info($marker, $msg)"
}

def infoMT(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String], t: c.Expr[Throwable]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isInfoEnabled(marker)) $underlying.info($marker, $msg, $t)"
}

def warn(c: Context { type PrefixType = Logger })(msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
Expand All @@ -51,6 +88,18 @@ private object LoggerMacro {
q"if ($underlying.isWarnEnabled) $underlying.warn($msg, $t)"
}

def warnM(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isWarnEnabled(marker)) $underlying.warn($marker, $msg)"
}

def warnMT(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String], t: c.Expr[Throwable]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isWarnEnabled(marker)) $underlying.warn($marker, $msg, $t)"
}

def error(c: Context { type PrefixType = Logger })(msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
Expand All @@ -62,4 +111,16 @@ private object LoggerMacro {
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isErrorEnabled) $underlying.error($msg, $t)"
}

def errorM(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isErrorEnabled(marker)) $underlying.error($marker, $msg)"
}

def errorMT(c: Context { type PrefixType = Logger })(marker: c.Expr[Marker], msg: c.Expr[String], t: c.Expr[Throwable]): c.universe.Tree = {
import c.universe._
val underlying = q"${c.prefix}.underlying"
q"if ($underlying.isErrorEnabled(marker)) $underlying.error($marker, $msg, $t)"
}
}
64 changes: 64 additions & 0 deletions src/test/scala/org/slf4s/LoggingWithMarkerExampleSpec.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package org.slf4s

import java.util

import org.scalatest.WordSpec
import org.slf4j.Marker
import org.slf4j.helpers.{BasicMarker, BasicMarkerFactory}

class LoggingWithMarkerExampleSpec extends WordSpec with Logging {
"Trace logging with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
log.trace(marker, "I log, therefore I am")
}

"Trace logging an exception with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
val exception = new RuntimeException("foo")
log.trace(marker, "I log, therefore I am", exception)
}

"Debug logging with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
log.debug(marker, "I log, therefore I am")
}

"Debug logging an exception with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
val exception = new RuntimeException("foo")
log.debug(marker, "I log, therefore I am", exception)
}

"Info logging with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
log.info(marker, "I log, therefore I am")
}

"Info logging an exception with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
val exception = new RuntimeException("foo")
log.info(marker, "I log, therefore I am", exception)
}

"Warn logging with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
log.warn(marker, "I log, therefore I am")
}

"Warn logging an exception with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
val exception = new RuntimeException("foo")
log.warn(marker, "I log, therefore I am", exception)
}

"Error logging with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
log.error(marker, "I log, therefore I am")
}

"Error logging an exception with a marker should work" in {
val marker: Marker = new BasicMarkerFactory().getMarker("MyMarker")
val exception = new RuntimeException("foo")
log.error(marker, "I log, therefore I am", exception)
}
}

0 comments on commit 946701f

Please sign in to comment.