Use more macros
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/f99223e4 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f99223e4 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f99223e4 Branch: refs/heads/master Commit: f99223e4a616bbd23bfe1a63f608d7af6dd0c044 Parents: 2b71356 Author: Mikael Ståldal <mikael.stal...@magine.com> Authored: Sun Jun 19 21:52:27 2016 +0200 Committer: Mikael Ståldal <mikael.stal...@magine.com> Committed: Sun Jun 19 21:52:27 2016 +0200 ---------------------------------------------------------------------- .../org/apache/logging/log4j/scala/Logger.scala | 16 +++++++-- .../logging/log4j/scala/LoggerMacro.scala | 36 +++++++++++++++----- .../apache/logging/log4j/scala/LoggerTest.scala | 29 +++++++++++++++- .../org/apache/logging/log4j/scala/Logger.scala | 16 +++++++-- .../logging/log4j/scala/LoggerMacro.scala | 34 ++++++++++++++---- .../apache/logging/log4j/scala/LoggerTest.scala | 29 +++++++++++++++- 6 files changed, 137 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f99223e4/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/Logger.scala ---------------------------------------------------------------------- diff --git a/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/Logger.scala b/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/Logger.scala index 7284f84..182e29a 100644 --- a/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/Logger.scala +++ b/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/Logger.scala @@ -298,7 +298,8 @@ class Logger(val delegate: ExtendedLogger) { def traceEntry(params: Any*): EntryMessage = macro LoggerMacro.traceEntryParams - def traceEntry(message: Message): EntryMessage = delegate.traceEntry(message) + def traceEntry(message: Message): EntryMessage = + macro LoggerMacro.traceEntryMessage def traceExit(): Unit = delegate.traceExit() @@ -308,7 +309,8 @@ class Logger(val delegate: ExtendedLogger) { def traceExit[R](entryMessage: EntryMessage, result: R): R = delegate.traceExit(entryMessage, result) - def traceExit[R](message: Message, result: R): R = delegate.traceExit(message, result) + def traceExit[R](message: Message, result: R): R = + macro LoggerMacro.traceExitMessageResult[R] def throwing[T <: Throwable](t: T): T = delegate.throwing(t) @@ -362,8 +364,16 @@ class Logger(val delegate: ExtendedLogger) { delegate.logMessage(FQCN, level, marker, messageFactory.newMessage(message), cause) } - private[scala] def traceEntryWithParams(params: Any*): EntryMessage = { + private[scala] def traceEntryParams(params: Any*): EntryMessage = { delegate.traceEntry(null, params) // TODO should not do ifEnabled check } + private[scala] def traceEntryMessage(message: Message): EntryMessage = { + delegate.traceEntry(message) // TODO should not do ifEnabled check + } + + private[scala] def traceExitMessageResult[R](message: Message, result: R): Unit = { + delegate.traceExit(message, result) // TODO should not do ifEnabled check + } + } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f99223e4/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala ---------------------------------------------------------------------- diff --git a/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala b/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala index a1ebee7..5f119bb 100644 --- a/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala +++ b/log4j-api-scala_2.10/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala @@ -25,7 +25,7 @@ import scala.reflect.macros.Context private object LoggerMacro { - type LoggerContext = Context { type PrefixType = Logger } + type LoggerContext = Context {type PrefixType = Logger} def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) = @@ -36,7 +36,7 @@ private object LoggerMacro { def fatalMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) = logMarkerObject(c)(c.universe.reify(Level.FATAL), marker, message) - + def fatalMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = logMarkerMsgThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause) @@ -45,7 +45,7 @@ private object LoggerMacro { def fatalMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) = logMarkerObjectThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause) - + def fatalMsg(c: LoggerContext)(message: c.Expr[Message]) = logMsg(c)(c.universe.reify(Level.FATAL), message) @@ -249,7 +249,7 @@ private object LoggerMacro { def traceObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) = logObjectThrowable(c)(c.universe.reify(Level.TRACE), message, cause) - + def logMarkerMsg(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[Message]) = c.universe.reify( if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) { @@ -270,7 +270,7 @@ private object LoggerMacro { c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, null) } ) - + def logMarkerMsgThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = c.universe.reify( if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) { @@ -291,7 +291,7 @@ private object LoggerMacro { c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, cause.splice) } ) - + def logMsg(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[Message]) = c.universe.reify( if (c.prefix.splice.delegate.isEnabled(level.splice)) { @@ -312,7 +312,7 @@ private object LoggerMacro { c.prefix.splice.logMessage(level.splice, null, message.splice, null) } ) - + def logMsgThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[Message], cause: c.Expr[Throwable]) = c.universe.reify( if (c.prefix.splice.delegate.isEnabled(level.splice)) { @@ -334,6 +334,7 @@ private object LoggerMacro { } ) + def traceEntryParams(c: LoggerContext)(params: c.Expr[Any]*): c.Expr[EntryMessage] = { import c.universe._ val isEnabled = Apply( @@ -347,10 +348,29 @@ private object LoggerMacro { ) val log = Apply( - Select(c.prefix.tree, newTermName("traceEntryWithParams")), + Select(c.prefix.tree, newTermName("traceEntryParams")), (params map (_.tree)).toList ) c.Expr[EntryMessage](If(isEnabled, log, reify(null).tree)) } + + def traceEntryMessage(c: LoggerContext)(message: c.Expr[Message]): c.Expr[EntryMessage] = + c.universe.reify( + if (c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)) { + c.prefix.splice.traceEntryMessage(message.splice) + } else { + null + } + ) + + def traceExitMessageResult[R: c.WeakTypeTag](c: LoggerContext)(message: c.Expr[Message], result: c.Expr[R]): c.Expr[R] = + c.universe.reify( + { + if (message.splice != null && c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, message.splice, null)) { + c.prefix.splice.traceExitMessageResult(message.splice, result.splice) + } + result.splice + } + ) } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f99223e4/log4j-api-scala_2.10/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala ---------------------------------------------------------------------- diff --git a/log4j-api-scala_2.10/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala b/log4j-api-scala_2.10/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala index 359281e..3bd4b49 100644 --- a/log4j-api-scala_2.10/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala +++ b/log4j-api-scala_2.10/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala @@ -40,6 +40,7 @@ class LoggerTest extends FunSuite with Matchers with MockitoSugar { val objectMsg = Custom(17) val cause = new RuntimeException("cause") val marker = MarkerManager.getMarker("marker") + val result = "foo" def fixture = new { @@ -452,10 +453,36 @@ class LoggerTest extends FunSuite with Matchers with MockitoSugar { verify(f.mockLogger).traceEntry() } - test("traceEntry with message") { + test("traceEntry enabled with message") { val f = fixture + when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(true) val logger = new Logger(f.mockLogger) logger.traceEntry(msg) verify(f.mockLogger).traceEntry(eqv(msg)) } + + test("traceEntry disabled with message") { + val f = fixture + when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(false) + val logger = new Logger(f.mockLogger) + logger.traceEntry(msg) + verify(f.mockLogger, never).traceEntry(any[Message]) + } + + test("traceExit enabled with message") { + val f = fixture + when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true) + val logger = new Logger(f.mockLogger) + logger.traceExit(msg, result) + verify(f.mockLogger).traceExit(eqv(msg), eqv(result)) + } + + test("traceExit disabled with message") { + val f = fixture + when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(false) + val logger = new Logger(f.mockLogger) + logger.traceExit(msg, result) + verify(f.mockLogger, never).traceExit(any[Message], any[AnyRef]) + } + } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f99223e4/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala ---------------------------------------------------------------------- diff --git a/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala b/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala index 7284f84..182e29a 100644 --- a/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala +++ b/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala @@ -298,7 +298,8 @@ class Logger(val delegate: ExtendedLogger) { def traceEntry(params: Any*): EntryMessage = macro LoggerMacro.traceEntryParams - def traceEntry(message: Message): EntryMessage = delegate.traceEntry(message) + def traceEntry(message: Message): EntryMessage = + macro LoggerMacro.traceEntryMessage def traceExit(): Unit = delegate.traceExit() @@ -308,7 +309,8 @@ class Logger(val delegate: ExtendedLogger) { def traceExit[R](entryMessage: EntryMessage, result: R): R = delegate.traceExit(entryMessage, result) - def traceExit[R](message: Message, result: R): R = delegate.traceExit(message, result) + def traceExit[R](message: Message, result: R): R = + macro LoggerMacro.traceExitMessageResult[R] def throwing[T <: Throwable](t: T): T = delegate.throwing(t) @@ -362,8 +364,16 @@ class Logger(val delegate: ExtendedLogger) { delegate.logMessage(FQCN, level, marker, messageFactory.newMessage(message), cause) } - private[scala] def traceEntryWithParams(params: Any*): EntryMessage = { + private[scala] def traceEntryParams(params: Any*): EntryMessage = { delegate.traceEntry(null, params) // TODO should not do ifEnabled check } + private[scala] def traceEntryMessage(message: Message): EntryMessage = { + delegate.traceEntry(message) // TODO should not do ifEnabled check + } + + private[scala] def traceExitMessageResult[R](message: Message, result: R): Unit = { + delegate.traceExit(message, result) // TODO should not do ifEnabled check + } + } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f99223e4/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala ---------------------------------------------------------------------- diff --git a/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala b/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala index 2105ad9..25fc5cf 100644 --- a/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala +++ b/log4j-api-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala @@ -36,7 +36,7 @@ private object LoggerMacro { def fatalMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) = logMarkerObject(c)(c.universe.reify(Level.FATAL), marker, message) - + def fatalMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = logMarkerMsgThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause) @@ -45,7 +45,7 @@ private object LoggerMacro { def fatalMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) = logMarkerObjectThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause) - + def fatalMsg(c: LoggerContext)(message: c.Expr[Message]) = logMsg(c)(c.universe.reify(Level.FATAL), message) @@ -249,7 +249,7 @@ private object LoggerMacro { def traceObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) = logObjectThrowable(c)(c.universe.reify(Level.TRACE), message, cause) - + def logMarkerMsg(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[Message]) = c.universe.reify( if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) { @@ -270,7 +270,7 @@ private object LoggerMacro { c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, null) } ) - + def logMarkerMsgThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = c.universe.reify( if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) { @@ -291,7 +291,7 @@ private object LoggerMacro { c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, cause.splice) } ) - + def logMsg(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[Message]) = c.universe.reify( if (c.prefix.splice.delegate.isEnabled(level.splice)) { @@ -312,7 +312,7 @@ private object LoggerMacro { c.prefix.splice.logMessage(level.splice, null, message.splice, null) } ) - + def logMsgThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[Message], cause: c.Expr[Throwable]) = c.universe.reify( if (c.prefix.splice.delegate.isEnabled(level.splice)) { @@ -334,6 +334,7 @@ private object LoggerMacro { } ) + def traceEntryParams(c: LoggerContext)(params: c.Expr[Any]*): c.Expr[EntryMessage] = { import c.universe._ val isEnabled = Apply( @@ -347,10 +348,29 @@ private object LoggerMacro { ) val log = Apply( - Select(c.prefix.tree, newTermName("traceEntryWithParams")), + Select(c.prefix.tree, newTermName("traceEntryParams")), (params map (_.tree)).toList ) c.Expr[EntryMessage](If(isEnabled, log, reify(null).tree)) } + + def traceEntryMessage(c: LoggerContext)(message: c.Expr[Message]): c.Expr[EntryMessage] = + c.universe.reify( + if (c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)) { + c.prefix.splice.traceEntryMessage(message.splice) + } else { + null + } + ) + + def traceExitMessageResult[R: c.WeakTypeTag](c: LoggerContext)(message: c.Expr[Message], result: c.Expr[R]): c.Expr[R] = + c.universe.reify( + { + if (message.splice != null && c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, message.splice, null)) { + c.prefix.splice.traceExitMessageResult(message.splice, result.splice) + } + result.splice + } + ) } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f99223e4/log4j-api-scala_2.11/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala ---------------------------------------------------------------------- diff --git a/log4j-api-scala_2.11/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala b/log4j-api-scala_2.11/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala index 359281e..3bd4b49 100644 --- a/log4j-api-scala_2.11/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala +++ b/log4j-api-scala_2.11/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala @@ -40,6 +40,7 @@ class LoggerTest extends FunSuite with Matchers with MockitoSugar { val objectMsg = Custom(17) val cause = new RuntimeException("cause") val marker = MarkerManager.getMarker("marker") + val result = "foo" def fixture = new { @@ -452,10 +453,36 @@ class LoggerTest extends FunSuite with Matchers with MockitoSugar { verify(f.mockLogger).traceEntry() } - test("traceEntry with message") { + test("traceEntry enabled with message") { val f = fixture + when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(true) val logger = new Logger(f.mockLogger) logger.traceEntry(msg) verify(f.mockLogger).traceEntry(eqv(msg)) } + + test("traceEntry disabled with message") { + val f = fixture + when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(false) + val logger = new Logger(f.mockLogger) + logger.traceEntry(msg) + verify(f.mockLogger, never).traceEntry(any[Message]) + } + + test("traceExit enabled with message") { + val f = fixture + when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true) + val logger = new Logger(f.mockLogger) + logger.traceExit(msg, result) + verify(f.mockLogger).traceExit(eqv(msg), eqv(result)) + } + + test("traceExit disabled with message") { + val f = fixture + when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(false) + val logger = new Logger(f.mockLogger) + logger.traceExit(msg, result) + verify(f.mockLogger, never).traceExit(any[Message], any[AnyRef]) + } + }