You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/08/28 12:24:53 UTC

[32/50] logging-log4j2 git commit: Macros for throwing and catching

Macros for throwing and catching


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4668ce28
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4668ce28
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4668ce28

Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 4668ce287a6500b9257b6279621a528900931c13
Parents: 7dac62e
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Jul 1 15:41:14 2016 +0200
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Jul 1 15:41:14 2016 +0200

----------------------------------------------------------------------
 .../org/apache/logging/log4j/scala/Logger.scala | 12 ++++++---
 .../logging/log4j/scala/LoggerMacro.scala       | 21 +++++++++++++++
 .../apache/logging/log4j/scala/LoggerTest.scala | 28 ++++++++++++++++++++
 .../org/apache/logging/log4j/scala/Logger.scala | 12 ++++++---
 .../logging/log4j/scala/LoggerMacro.scala       | 21 +++++++++++++++
 .../apache/logging/log4j/scala/LoggerTest.scala | 28 ++++++++++++++++++++
 .../logging/log4j/scalasample/LoggingApp.scala  |  9 +++++++
 7 files changed, 123 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4668ce28/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 1c19fcd..a5ebacf 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
@@ -534,7 +534,8 @@ class Logger private(val delegate: ExtendedLogger) {
     * @param t the Throwable
     * @return `t`
     */
-  def throwing[T <: Throwable](t: T): T = delegate.throwing(t)
+  def throwing[T <: Throwable](t: T): T =
+  macro LoggerMacro.throwing[T]
 
   /**
     * Logs an exception or error to be thrown to a specific logging level.
@@ -547,14 +548,16 @@ class Logger private(val delegate: ExtendedLogger) {
     * @param t     the Throwable
     * @return `t`
     */
-  def throwing[T <: Throwable](level: Level, t: T): T = delegate.throwing(level, t)
+  def throwing[T <: Throwable](level: Level, t: T): T =
+  macro LoggerMacro.throwingLevel[T]
 
   /**
     * Logs an exception or error that has been caught.
     *
     * @param t the Throwable.
     */
-  def catching(t: Throwable): Unit = delegate.catching(t)
+  def catching(t: Throwable): Unit =
+  macro LoggerMacro.catching
 
   /**
     * Logs an exception or error that has been caught to a specific logging level.
@@ -562,7 +565,8 @@ class Logger private(val delegate: ExtendedLogger) {
     * @param level The logging Level.
     * @param t     The Throwable.
     */
-  def catching(level: Level, t: Throwable): Unit = delegate.catching(level, t)
+  def catching(level: Level, t: Throwable): Unit =
+  macro LoggerMacro.catchingLevel
 
 
   /** Always logs a message at the specified level. It is the responsibility of the caller to ensure the specified

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4668ce28/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 6ff8e53..24b3c8c 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
@@ -401,4 +401,25 @@ private object LoggerMacro {
         result.splice
       }
     )
+
+  def throwing[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(t: c.Expr[T]): c.Expr[T] =
+    c.universe.reify(
+      c.prefix.splice.delegate.throwing(t.splice)
+    )
+
+  def throwingLevel[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(level: c.Expr[Level], t: c.Expr[T]): c.Expr[T] =
+    c.universe.reify(
+      c.prefix.splice.delegate.throwing(level.splice, t.splice)
+    )
+
+  def catching(c: LoggerContext)(t: c.Expr[Throwable]): c.Expr[Unit] =
+    c.universe.reify(
+      c.prefix.splice.delegate.catching(t.splice)
+    )
+
+  def catchingLevel(c: LoggerContext)(level: c.Expr[Level], t: c.Expr[Throwable]): c.Expr[Unit] =
+    c.universe.reify(
+      c.prefix.splice.delegate.catching(level.splice, t.splice)
+    )
+
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4668ce28/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 4c14d5d..ba02437 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
@@ -559,4 +559,32 @@ class LoggerTest extends FunSuite with Matchers with MockitoSugar {
     verify(f.mockLogger, never).traceExit(any[Message], any[AnyRef])
   }
 
+  test("throwing") {
+    val f = fixture
+    val logger = Logger(f.mockLogger)
+    logger.throwing(cause)
+    verify(f.mockLogger).throwing(eqv(cause))
+  }
+
+  test("throwing with level") {
+    val f = fixture
+    val logger = Logger(f.mockLogger)
+    logger.throwing(Level.INFO, cause)
+    verify(f.mockLogger).throwing(eqv(Level.INFO), eqv(cause))
+  }
+
+  test("catching") {
+    val f = fixture
+    val logger = Logger(f.mockLogger)
+    logger.catching(cause)
+    verify(f.mockLogger).catching(eqv(cause))
+  }
+
+  test("catching with level") {
+    val f = fixture
+    val logger = Logger(f.mockLogger)
+    logger.catching(Level.INFO, cause)
+    verify(f.mockLogger).catching(eqv(Level.INFO), eqv(cause))
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4668ce28/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 1c19fcd..a5ebacf 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
@@ -534,7 +534,8 @@ class Logger private(val delegate: ExtendedLogger) {
     * @param t the Throwable
     * @return `t`
     */
-  def throwing[T <: Throwable](t: T): T = delegate.throwing(t)
+  def throwing[T <: Throwable](t: T): T =
+  macro LoggerMacro.throwing[T]
 
   /**
     * Logs an exception or error to be thrown to a specific logging level.
@@ -547,14 +548,16 @@ class Logger private(val delegate: ExtendedLogger) {
     * @param t     the Throwable
     * @return `t`
     */
-  def throwing[T <: Throwable](level: Level, t: T): T = delegate.throwing(level, t)
+  def throwing[T <: Throwable](level: Level, t: T): T =
+  macro LoggerMacro.throwingLevel[T]
 
   /**
     * Logs an exception or error that has been caught.
     *
     * @param t the Throwable.
     */
-  def catching(t: Throwable): Unit = delegate.catching(t)
+  def catching(t: Throwable): Unit =
+  macro LoggerMacro.catching
 
   /**
     * Logs an exception or error that has been caught to a specific logging level.
@@ -562,7 +565,8 @@ class Logger private(val delegate: ExtendedLogger) {
     * @param level The logging Level.
     * @param t     The Throwable.
     */
-  def catching(level: Level, t: Throwable): Unit = delegate.catching(level, t)
+  def catching(level: Level, t: Throwable): Unit =
+  macro LoggerMacro.catchingLevel
 
 
   /** Always logs a message at the specified level. It is the responsibility of the caller to ensure the specified

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4668ce28/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 5e9fa44..a091c97 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
@@ -401,4 +401,25 @@ private object LoggerMacro {
         result.splice
       }
     )
+
+  def throwing[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(t: c.Expr[T]): c.Expr[T] =
+    c.universe.reify(
+      c.prefix.splice.delegate.throwing(t.splice)
+    )
+
+  def throwingLevel[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(level: c.Expr[Level], t: c.Expr[T]): c.Expr[T] =
+    c.universe.reify(
+      c.prefix.splice.delegate.throwing(level.splice, t.splice)
+    )
+
+  def catching(c: LoggerContext)(t: c.Expr[Throwable]): c.Expr[Unit] =
+    c.universe.reify(
+      c.prefix.splice.delegate.catching(t.splice)
+    )
+
+  def catchingLevel(c: LoggerContext)(level: c.Expr[Level], t: c.Expr[Throwable]): c.Expr[Unit] =
+    c.universe.reify(
+      c.prefix.splice.delegate.catching(level.splice, t.splice)
+    )
+
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4668ce28/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 4c14d5d..ba02437 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
@@ -559,4 +559,32 @@ class LoggerTest extends FunSuite with Matchers with MockitoSugar {
     verify(f.mockLogger, never).traceExit(any[Message], any[AnyRef])
   }
 
+  test("throwing") {
+    val f = fixture
+    val logger = Logger(f.mockLogger)
+    logger.throwing(cause)
+    verify(f.mockLogger).throwing(eqv(cause))
+  }
+
+  test("throwing with level") {
+    val f = fixture
+    val logger = Logger(f.mockLogger)
+    logger.throwing(Level.INFO, cause)
+    verify(f.mockLogger).throwing(eqv(Level.INFO), eqv(cause))
+  }
+
+  test("catching") {
+    val f = fixture
+    val logger = Logger(f.mockLogger)
+    logger.catching(cause)
+    verify(f.mockLogger).catching(eqv(cause))
+  }
+
+  test("catching with level") {
+    val f = fixture
+    val logger = Logger(f.mockLogger)
+    logger.catching(Level.INFO, cause)
+    verify(f.mockLogger).catching(eqv(Level.INFO), eqv(cause))
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4668ce28/log4j-samples/scala-api/src/main/scala/org/apache/logging/log4j/scalasample/LoggingApp.scala
----------------------------------------------------------------------
diff --git a/log4j-samples/scala-api/src/main/scala/org/apache/logging/log4j/scalasample/LoggingApp.scala b/log4j-samples/scala-api/src/main/scala/org/apache/logging/log4j/scalasample/LoggingApp.scala
index f00b9ee..a62620b 100644
--- a/log4j-samples/scala-api/src/main/scala/org/apache/logging/log4j/scalasample/LoggingApp.scala
+++ b/log4j-samples/scala-api/src/main/scala/org/apache/logging/log4j/scalasample/LoggingApp.scala
@@ -1,5 +1,6 @@
 package org.apache.logging.log4j.scalasample
 
+import org.apache.logging.log4j.Level
 import org.apache.logging.log4j.message.MessageFactory2
 import org.apache.logging.log4j.scala.Logging
 
@@ -7,6 +8,8 @@ object LoggingApp extends App with Logging {
 
   val s1 = "foo"
   val s2 = "bar"
+  val t = new RuntimeException("error")
+
   logger.info(s"Hello, world: $s1 $s2")
 
   logger.traceEntry()
@@ -19,4 +22,10 @@ object LoggingApp extends App with Logging {
   logger.traceExit(entryMessage, s2)
   logger.traceExit(logger.delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage("bonsai": CharSequence), s2)
 
+  logger.throwing(t)
+  logger.throwing(Level.INFO, t)
+
+  logger.catching(t)
+  logger.catching(Level.INFO, t)
+
 }
\ No newline at end of file