You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2018/04/03 21:06:29 UTC

[07/50] [abbrv] logging-log4j-scala git commit: Fix packaging issues with macro file

Fix packaging issues with macro file


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/53cfa5db
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/53cfa5db
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/53cfa5db

Branch: refs/heads/master
Commit: 53cfa5db91e59f28026032ba0ab341001a3e78a9
Parents: 47ba596
Author: Matt Sicker <bo...@gmail.com>
Authored: Thu Mar 29 15:04:22 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Thu Mar 29 15:04:22 2018 -0500

----------------------------------------------------------------------
 Jenkinsfile                                     |   4 +-
 build.sbt                                       |  42 +-
 project/Dependencies.scala                      |  17 +-
 .../logging/log4j/scala/LoggerMacro.scala       | 425 +++++++++++++++++++
 .../logging/log4j/scala/LoggerMacro.scala       | 425 -------------------
 5 files changed, 466 insertions(+), 447 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index a117fc0..032d4d1 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -42,9 +42,9 @@ pipeline {
             when { branch 'master' }
             steps {
                 ansiColor('xterm') {
+                    sh './sbt -batch "+ publish"'
                     // FIXME: LOG4J2-2291
-                    //sh './sbt -batch "+ publish"'
-                    archiveArtifacts artifacts: 'target/**/*.jar', fingerprint: true
+                    archiveArtifacts artifacts: 'target/repository/**'
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 5cc1c21..118337c 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,4 +1,5 @@
 import Dependencies._
+//import OsgiKeys._
 
 lazy val metadataSettings = Seq(
   organization := "org.apache.logging.log4j",
@@ -45,41 +46,48 @@ lazy val publishSettings = Seq(
   publishArtifact in Test := false,
   publishTo := {
     if (isSnapshot.value) {
-      Some("Apache Snapshots" at "https://repository.apache.org/content/repositories/snapshots")
+      // FIXME: LOG4J2-2291
+      //Some("Apache Snapshots" at "https://repository.apache.org/content/repositories/snapshots")
+      Some(Resolver.file("file", file("target/repository/")))
     } else {
       Some("Apache Releases" at "https://repository.apache.org/service/local/staging/deploy/maven2")
     }
-  },
-  credentials += Credentials(Path.userHome / ".ivy2" / ".credentials"),
+  }
+//  credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
 //  managedResources
 //  resourceGenerators in Compile += inlineTask(Seq(file("LICENSE.txt"), file("NOTICE.txt")))
 )
 
 lazy val releaseSettings = Seq(
-  releaseCrossBuild := true
+  releaseCrossBuild := true,
+  apiURL := Some(url(s"https://logging.apache.org/log4j/scala/log4j-api-scala_${scalaBinaryVersion.value}/scaladocs/"))
 )
 
 lazy val apiDependencies = Seq(
   libraryDependencies ++= Seq(
-    "org.scala-lang" % "scala-reflect" % scalaVersion.value,
-    "org.apache.logging.log4j" % "log4j-api" % log4j,
-    "org.apache.logging.log4j" % "log4j-api" % log4j % Test classifier "tests",
-    "junit" % "junit" % junit % Test,
-    "org.scalatest" %% "scalatest" % scalatest % Test,
-    "org.mockito" % "mockito-core" % mockito % Test
+    scalaReflect(scalaVersion.value),
+    osgiCoreApi,
+    log4jApi,
+    log4jApiTests,
+    junit,
+    scalatest,
+    mockito
   )
 )
 
 lazy val apiInputFiles = Seq(
-  sources in Compile := {
-    val filteredFiles = {
-      for ((_, minor) <- CrossVersion.partialVersion(scalaVersion.value) if minor == 10)
-        yield ((baseDirectory.value / "src" / "main" / "scala") ** "*Macro.scala").get
-    }.getOrElse(Seq())
-    (sources in Compile).value.filterNot(filteredFiles.contains)
+  unmanagedSources in Compile := {
+    val Some((_, minor)) = CrossVersion.partialVersion(scalaVersion.value)
+    val extras = if (minor > 10) ((baseDirectory.value / "src" / "main" / "scala-2.11+") ** "*.scala").get else Nil
+    (unmanagedSources in Compile).value ++ extras
   }
 )
 
+//lazy val bundleSettings = osgiSettings ++ Seq(
+//  bundleSymbolicName := "org.apache.logging.log4j.scala",
+//  exportPackage := Seq("org.apache.logging.log4j.scala")
+//)
+
 lazy val root = (project in file("."))
   .settings(name := "log4j-api-scala")
   .settings(metadataSettings: _*)
@@ -88,6 +96,8 @@ lazy val root = (project in file("."))
   .settings(releaseSettings: _*)
   .settings(apiDependencies: _*)
   .settings(apiInputFiles: _*)
+//  .enablePlugins(SbtOsgi)
+//  .settings(bundleSettings: _*)
 
 //lazy val nopublish = Seq(
 //  publish := {},

http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/project/Dependencies.scala
----------------------------------------------------------------------
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index be85a27..0de9510 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -1,10 +1,19 @@
+import sbt._
+
 object Dependencies {
   val scala210 = "2.10.7"
   val scala211 = "2.11.12"
   val scala212 = "2.12.4"
   val scala213 = "2.13.0-M2"
-  val log4j = "2.11.0"
-  val junit = "4.12"
-  val scalatest = "3.0.4"
-  val mockito = "1.10.19"
+
+  def scalaReflect(version: String): ModuleID =
+    "org.scala-lang" % "scala-reflect" % version
+
+  val osgiCoreApi = "org.osgi" % "org.osgi.core" % "4.3.0" % Provided
+  private val log4jV = "2.11.0"
+  val log4jApi = "org.apache.logging.log4j" % "log4j-api" % log4jV
+  val log4jApiTests = "org.apache.logging.log4j" % "log4j-api" % log4jV % Test classifier "tests"
+  val junit = "junit" % "junit" % "4.12" % Test
+  val scalatest = "org.scalatest" %% "scalatest" % "3.0.4" % Test
+  val mockito = "org.mockito" % "mockito-core" % "1.10.19" % Test
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/src/main/scala-2.11+/org/apache/logging/log4j/scala/LoggerMacro.scala
----------------------------------------------------------------------
diff --git a/src/main/scala-2.11+/org/apache/logging/log4j/scala/LoggerMacro.scala b/src/main/scala-2.11+/org/apache/logging/log4j/scala/LoggerMacro.scala
new file mode 100644
index 0000000..3b54db1
--- /dev/null
+++ b/src/main/scala-2.11+/org/apache/logging/log4j/scala/LoggerMacro.scala
@@ -0,0 +1,425 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.scala
+
+import org.apache.logging.log4j.message.{EntryMessage, Message}
+import org.apache.logging.log4j.spi.AbstractLogger
+import org.apache.logging.log4j.{Level, Marker}
+
+import scala.language.experimental.macros
+import scala.reflect.macros.blackbox
+
+/**
+  * Inspired from [[https://github.com/typesafehub/scalalogging ScalaLogging]].
+  */
+private object LoggerMacro {
+
+  type LoggerContext = blackbox.Context { type PrefixType = Logger }
+
+
+  def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
+    logMarkerMsg(c)(c.universe.reify(Level.FATAL), marker, message)
+
+  def fatalMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+    logMarkerCseq(c)(c.universe.reify(Level.FATAL), marker, message)
+
+  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)
+
+  def fatalMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logMarkerCseqThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause)
+
+  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)
+
+  def fatalCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+    logCseq(c)(c.universe.reify(Level.FATAL), message)
+
+  def fatalObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+    logObject(c)(c.universe.reify(Level.FATAL), message)
+
+  def fatalMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMsgThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
+
+  def fatalCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logCseqThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
+
+  def fatalObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logObjectThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
+
+
+  def errorMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
+    logMarkerMsg(c)(c.universe.reify(Level.ERROR), marker, message)
+
+  def errorMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+    logMarkerCseq(c)(c.universe.reify(Level.ERROR), marker, message)
+
+  def errorMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+    logMarkerObject(c)(c.universe.reify(Level.ERROR), marker, message)
+
+  def errorMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMarkerMsgThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
+
+  def errorMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logMarkerCseqThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
+
+  def errorMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logMarkerObjectThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
+
+  def errorMsg(c: LoggerContext)(message: c.Expr[Message]) =
+    logMsg(c)(c.universe.reify(Level.ERROR), message)
+
+  def errorCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+    logCseq(c)(c.universe.reify(Level.ERROR), message)
+
+  def errorObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+    logObject(c)(c.universe.reify(Level.ERROR), message)
+
+  def errorMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMsgThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
+
+  def errorCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logCseqThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
+
+  def errorObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logObjectThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
+
+
+  def warnMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
+    logMarkerMsg(c)(c.universe.reify(Level.WARN), marker, message)
+
+  def warnMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+    logMarkerCseq(c)(c.universe.reify(Level.WARN), marker, message)
+
+  def warnMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+    logMarkerObject(c)(c.universe.reify(Level.WARN), marker, message)
+
+  def warnMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMarkerMsgThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
+
+  def warnMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logMarkerCseqThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
+
+  def warnMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logMarkerObjectThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
+
+  def warnMsg(c: LoggerContext)(message: c.Expr[Message]) =
+    logMsg(c)(c.universe.reify(Level.WARN), message)
+
+  def warnCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+    logCseq(c)(c.universe.reify(Level.WARN), message)
+
+  def warnObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+    logObject(c)(c.universe.reify(Level.WARN), message)
+
+  def warnMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMsgThrowable(c)(c.universe.reify(Level.WARN), message, cause)
+
+  def warnCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logCseqThrowable(c)(c.universe.reify(Level.WARN), message, cause)
+
+  def warnObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logObjectThrowable(c)(c.universe.reify(Level.WARN), message, cause)
+
+
+  def infoMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
+    logMarkerMsg(c)(c.universe.reify(Level.INFO), marker, message)
+
+  def infoMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+    logMarkerCseq(c)(c.universe.reify(Level.INFO), marker, message)
+
+  def infoMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+    logMarkerObject(c)(c.universe.reify(Level.INFO), marker, message)
+
+  def infoMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMarkerMsgThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
+
+  def infoMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logMarkerCseqThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
+
+  def infoMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logMarkerObjectThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
+
+  def infoMsg(c: LoggerContext)(message: c.Expr[Message]) =
+    logMsg(c)(c.universe.reify(Level.INFO), message)
+
+  def infoCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+    logCseq(c)(c.universe.reify(Level.INFO), message)
+
+  def infoObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+    logObject(c)(c.universe.reify(Level.INFO), message)
+
+  def infoMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMsgThrowable(c)(c.universe.reify(Level.INFO), message, cause)
+
+  def infoCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logCseqThrowable(c)(c.universe.reify(Level.INFO), message, cause)
+
+  def infoObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logObjectThrowable(c)(c.universe.reify(Level.INFO), message, cause)
+
+
+  def debugMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
+    logMarkerMsg(c)(c.universe.reify(Level.DEBUG), marker, message)
+
+  def debugMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+    logMarkerCseq(c)(c.universe.reify(Level.DEBUG), marker, message)
+
+  def debugMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+    logMarkerObject(c)(c.universe.reify(Level.DEBUG), marker, message)
+
+  def debugMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMarkerMsgThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
+
+  def debugMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logMarkerCseqThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
+
+  def debugMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logMarkerObjectThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
+
+  def debugMsg(c: LoggerContext)(message: c.Expr[Message]) =
+    logMsg(c)(c.universe.reify(Level.DEBUG), message)
+
+  def debugCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+    logCseq(c)(c.universe.reify(Level.DEBUG), message)
+
+  def debugObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+    logObject(c)(c.universe.reify(Level.DEBUG), message)
+
+  def debugMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMsgThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
+
+  def debugCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logCseqThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
+
+  def debugObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logObjectThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
+
+
+  def traceMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
+    logMarkerMsg(c)(c.universe.reify(Level.TRACE), marker, message)
+
+  def traceMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+    logMarkerCseq(c)(c.universe.reify(Level.TRACE), marker, message)
+
+  def traceMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+    logMarkerObject(c)(c.universe.reify(Level.TRACE), marker, message)
+
+  def traceMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMarkerMsgThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
+
+  def traceMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logMarkerCseqThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
+
+  def traceMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    logMarkerObjectThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
+
+  def traceMsg(c: LoggerContext)(message: c.Expr[Message]) =
+    logMsg(c)(c.universe.reify(Level.TRACE), message)
+
+  def traceCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+    logCseq(c)(c.universe.reify(Level.TRACE), message)
+
+  def traceObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+    logObject(c)(c.universe.reify(Level.TRACE), message)
+
+  def traceMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
+    logMsgThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
+
+  def traceCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    logCseqThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
+
+  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)) {
+        c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, null)
+      }
+    )
+
+  def logMarkerCseq(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+    c.universe.reify(
+      if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) {
+        c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, null)
+      }
+    )
+
+  def logMarkerObject(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+    c.universe.reify(
+      if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) {
+        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)) {
+        c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, cause.splice)
+      }
+    )
+
+  def logMarkerCseqThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    c.universe.reify(
+      if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) {
+        c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, cause.splice)
+      }
+    )
+
+  def logMarkerObjectThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    c.universe.reify(
+      if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) {
+        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)) {
+        c.prefix.splice.logMessage(level.splice, null, message.splice, null)
+      }
+    )
+
+  def logCseq(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence]) =
+    c.universe.reify(
+      if (c.prefix.splice.delegate.isEnabled(level.splice)) {
+        c.prefix.splice.logMessage(level.splice, null, message.splice, null)
+      }
+    )
+
+  def logObject(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef]) =
+    c.universe.reify(
+      if (c.prefix.splice.delegate.isEnabled(level.splice)) {
+        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)) {
+        c.prefix.splice.logMessage(level.splice, null, message.splice, cause.splice)
+      }
+    )
+
+  def logCseqThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+    c.universe.reify(
+      if (c.prefix.splice.delegate.isEnabled(level.splice)) {
+        c.prefix.splice.logMessage(level.splice, null, message.splice, cause.splice)
+      }
+    )
+
+  def logObjectThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+    c.universe.reify(
+      if (c.prefix.splice.delegate.isEnabled(level.splice)) {
+        c.prefix.splice.logMessage(level.splice, null, message.splice, cause.splice)
+      }
+    )
+
+
+  def traceEntry(c: LoggerContext)(): c.Expr[EntryMessage] =
+    c.universe.reify(
+      c.prefix.splice.delegate.traceEntry()
+    )
+
+  def traceEntryParams(c: LoggerContext)(params: c.Expr[AnyRef]*): c.Expr[EntryMessage] = {
+    import c.universe._
+    val isEnabled = Apply(
+      Select(Select(c.prefix.tree, TermName("delegate")), TermName("isEnabled")),
+      List(
+        reify(Level.TRACE).tree,
+        reify(AbstractLogger.ENTRY_MARKER).tree,
+        reify(null: AnyRef).tree,
+        reify(null).tree
+      )
+    )
+
+    val log = Apply(
+      Select(Select(c.prefix.tree, TermName("delegate")), TermName("traceEntry")),
+      reify(null: String).tree :: (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: AnyRef, null)) {
+        c.prefix.splice.delegate.traceEntry(message.splice)  // TODO should not do ifEnabled check
+      } else {
+        null
+      }
+    )
+
+  def traceExit(c: LoggerContext)(): c.Expr[Unit] =
+    c.universe.reify(
+      c.prefix.splice.delegate.traceExit()
+    )
+
+  def traceExitResult[R: c.WeakTypeTag](c: LoggerContext)(result: c.Expr[R]): c.Expr[R] =
+    c.universe.reify(
+      c.prefix.splice.delegate.traceExit(result.splice)
+    )
+
+  def traceExitEntryMessage(c: LoggerContext)(entryMessage: c.Expr[EntryMessage]): c.Expr[Unit] =
+    c.universe.reify(
+      c.prefix.splice.delegate.traceExit(entryMessage.splice)
+    )
+
+  def traceExitEntryMessageResult[R: c.WeakTypeTag](c: LoggerContext)(entryMessage: c.Expr[EntryMessage], result: c.Expr[R]): c.Expr[R] =
+    c.universe.reify(
+      c.prefix.splice.delegate.traceExit(entryMessage.splice, result.splice)
+    )
+
+  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.delegate.traceExit(message.splice, result.splice)  // TODO should not do ifEnabled check
+        }
+        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-log4j-scala/blob/53cfa5db/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
----------------------------------------------------------------------
diff --git a/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala b/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
deleted file mode 100644
index 3b54db1..0000000
--- a/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache license, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the license for the specific language governing permissions and
- * limitations under the license.
- */
-package org.apache.logging.log4j.scala
-
-import org.apache.logging.log4j.message.{EntryMessage, Message}
-import org.apache.logging.log4j.spi.AbstractLogger
-import org.apache.logging.log4j.{Level, Marker}
-
-import scala.language.experimental.macros
-import scala.reflect.macros.blackbox
-
-/**
-  * Inspired from [[https://github.com/typesafehub/scalalogging ScalaLogging]].
-  */
-private object LoggerMacro {
-
-  type LoggerContext = blackbox.Context { type PrefixType = Logger }
-
-
-  def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
-    logMarkerMsg(c)(c.universe.reify(Level.FATAL), marker, message)
-
-  def fatalMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
-    logMarkerCseq(c)(c.universe.reify(Level.FATAL), marker, message)
-
-  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)
-
-  def fatalMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logMarkerCseqThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause)
-
-  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)
-
-  def fatalCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
-    logCseq(c)(c.universe.reify(Level.FATAL), message)
-
-  def fatalObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
-    logObject(c)(c.universe.reify(Level.FATAL), message)
-
-  def fatalMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMsgThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
-
-  def fatalCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logCseqThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
-
-  def fatalObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logObjectThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
-
-
-  def errorMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
-    logMarkerMsg(c)(c.universe.reify(Level.ERROR), marker, message)
-
-  def errorMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
-    logMarkerCseq(c)(c.universe.reify(Level.ERROR), marker, message)
-
-  def errorMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
-    logMarkerObject(c)(c.universe.reify(Level.ERROR), marker, message)
-
-  def errorMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMarkerMsgThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
-
-  def errorMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logMarkerCseqThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
-
-  def errorMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logMarkerObjectThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
-
-  def errorMsg(c: LoggerContext)(message: c.Expr[Message]) =
-    logMsg(c)(c.universe.reify(Level.ERROR), message)
-
-  def errorCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
-    logCseq(c)(c.universe.reify(Level.ERROR), message)
-
-  def errorObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
-    logObject(c)(c.universe.reify(Level.ERROR), message)
-
-  def errorMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMsgThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
-
-  def errorCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logCseqThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
-
-  def errorObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logObjectThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
-
-
-  def warnMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
-    logMarkerMsg(c)(c.universe.reify(Level.WARN), marker, message)
-
-  def warnMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
-    logMarkerCseq(c)(c.universe.reify(Level.WARN), marker, message)
-
-  def warnMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
-    logMarkerObject(c)(c.universe.reify(Level.WARN), marker, message)
-
-  def warnMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMarkerMsgThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
-
-  def warnMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logMarkerCseqThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
-
-  def warnMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logMarkerObjectThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
-
-  def warnMsg(c: LoggerContext)(message: c.Expr[Message]) =
-    logMsg(c)(c.universe.reify(Level.WARN), message)
-
-  def warnCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
-    logCseq(c)(c.universe.reify(Level.WARN), message)
-
-  def warnObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
-    logObject(c)(c.universe.reify(Level.WARN), message)
-
-  def warnMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMsgThrowable(c)(c.universe.reify(Level.WARN), message, cause)
-
-  def warnCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logCseqThrowable(c)(c.universe.reify(Level.WARN), message, cause)
-
-  def warnObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logObjectThrowable(c)(c.universe.reify(Level.WARN), message, cause)
-
-
-  def infoMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
-    logMarkerMsg(c)(c.universe.reify(Level.INFO), marker, message)
-
-  def infoMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
-    logMarkerCseq(c)(c.universe.reify(Level.INFO), marker, message)
-
-  def infoMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
-    logMarkerObject(c)(c.universe.reify(Level.INFO), marker, message)
-
-  def infoMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMarkerMsgThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
-
-  def infoMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logMarkerCseqThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
-
-  def infoMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logMarkerObjectThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
-
-  def infoMsg(c: LoggerContext)(message: c.Expr[Message]) =
-    logMsg(c)(c.universe.reify(Level.INFO), message)
-
-  def infoCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
-    logCseq(c)(c.universe.reify(Level.INFO), message)
-
-  def infoObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
-    logObject(c)(c.universe.reify(Level.INFO), message)
-
-  def infoMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMsgThrowable(c)(c.universe.reify(Level.INFO), message, cause)
-
-  def infoCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logCseqThrowable(c)(c.universe.reify(Level.INFO), message, cause)
-
-  def infoObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logObjectThrowable(c)(c.universe.reify(Level.INFO), message, cause)
-
-
-  def debugMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
-    logMarkerMsg(c)(c.universe.reify(Level.DEBUG), marker, message)
-
-  def debugMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
-    logMarkerCseq(c)(c.universe.reify(Level.DEBUG), marker, message)
-
-  def debugMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
-    logMarkerObject(c)(c.universe.reify(Level.DEBUG), marker, message)
-
-  def debugMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMarkerMsgThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
-
-  def debugMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logMarkerCseqThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
-
-  def debugMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logMarkerObjectThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
-
-  def debugMsg(c: LoggerContext)(message: c.Expr[Message]) =
-    logMsg(c)(c.universe.reify(Level.DEBUG), message)
-
-  def debugCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
-    logCseq(c)(c.universe.reify(Level.DEBUG), message)
-
-  def debugObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
-    logObject(c)(c.universe.reify(Level.DEBUG), message)
-
-  def debugMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMsgThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
-
-  def debugCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logCseqThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
-
-  def debugObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logObjectThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
-
-
-  def traceMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
-    logMarkerMsg(c)(c.universe.reify(Level.TRACE), marker, message)
-
-  def traceMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
-    logMarkerCseq(c)(c.universe.reify(Level.TRACE), marker, message)
-
-  def traceMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
-    logMarkerObject(c)(c.universe.reify(Level.TRACE), marker, message)
-
-  def traceMarkerMsgThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMarkerMsgThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
-
-  def traceMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logMarkerCseqThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
-
-  def traceMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    logMarkerObjectThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
-
-  def traceMsg(c: LoggerContext)(message: c.Expr[Message]) =
-    logMsg(c)(c.universe.reify(Level.TRACE), message)
-
-  def traceCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
-    logCseq(c)(c.universe.reify(Level.TRACE), message)
-
-  def traceObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
-    logObject(c)(c.universe.reify(Level.TRACE), message)
-
-  def traceMsgThrowable(c: LoggerContext)(message: c.Expr[Message], cause: c.Expr[Throwable]) =
-    logMsgThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
-
-  def traceCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    logCseqThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
-
-  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)) {
-        c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, null)
-      }
-    )
-
-  def logMarkerCseq(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
-    c.universe.reify(
-      if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) {
-        c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, null)
-      }
-    )
-
-  def logMarkerObject(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
-    c.universe.reify(
-      if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) {
-        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)) {
-        c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, cause.splice)
-      }
-    )
-
-  def logMarkerCseqThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    c.universe.reify(
-      if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) {
-        c.prefix.splice.logMessage(level.splice, marker.splice, message.splice, cause.splice)
-      }
-    )
-
-  def logMarkerObjectThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    c.universe.reify(
-      if (c.prefix.splice.delegate.isEnabled(level.splice, marker.splice)) {
-        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)) {
-        c.prefix.splice.logMessage(level.splice, null, message.splice, null)
-      }
-    )
-
-  def logCseq(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence]) =
-    c.universe.reify(
-      if (c.prefix.splice.delegate.isEnabled(level.splice)) {
-        c.prefix.splice.logMessage(level.splice, null, message.splice, null)
-      }
-    )
-
-  def logObject(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef]) =
-    c.universe.reify(
-      if (c.prefix.splice.delegate.isEnabled(level.splice)) {
-        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)) {
-        c.prefix.splice.logMessage(level.splice, null, message.splice, cause.splice)
-      }
-    )
-
-  def logCseqThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
-    c.universe.reify(
-      if (c.prefix.splice.delegate.isEnabled(level.splice)) {
-        c.prefix.splice.logMessage(level.splice, null, message.splice, cause.splice)
-      }
-    )
-
-  def logObjectThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
-    c.universe.reify(
-      if (c.prefix.splice.delegate.isEnabled(level.splice)) {
-        c.prefix.splice.logMessage(level.splice, null, message.splice, cause.splice)
-      }
-    )
-
-
-  def traceEntry(c: LoggerContext)(): c.Expr[EntryMessage] =
-    c.universe.reify(
-      c.prefix.splice.delegate.traceEntry()
-    )
-
-  def traceEntryParams(c: LoggerContext)(params: c.Expr[AnyRef]*): c.Expr[EntryMessage] = {
-    import c.universe._
-    val isEnabled = Apply(
-      Select(Select(c.prefix.tree, TermName("delegate")), TermName("isEnabled")),
-      List(
-        reify(Level.TRACE).tree,
-        reify(AbstractLogger.ENTRY_MARKER).tree,
-        reify(null: AnyRef).tree,
-        reify(null).tree
-      )
-    )
-
-    val log = Apply(
-      Select(Select(c.prefix.tree, TermName("delegate")), TermName("traceEntry")),
-      reify(null: String).tree :: (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: AnyRef, null)) {
-        c.prefix.splice.delegate.traceEntry(message.splice)  // TODO should not do ifEnabled check
-      } else {
-        null
-      }
-    )
-
-  def traceExit(c: LoggerContext)(): c.Expr[Unit] =
-    c.universe.reify(
-      c.prefix.splice.delegate.traceExit()
-    )
-
-  def traceExitResult[R: c.WeakTypeTag](c: LoggerContext)(result: c.Expr[R]): c.Expr[R] =
-    c.universe.reify(
-      c.prefix.splice.delegate.traceExit(result.splice)
-    )
-
-  def traceExitEntryMessage(c: LoggerContext)(entryMessage: c.Expr[EntryMessage]): c.Expr[Unit] =
-    c.universe.reify(
-      c.prefix.splice.delegate.traceExit(entryMessage.splice)
-    )
-
-  def traceExitEntryMessageResult[R: c.WeakTypeTag](c: LoggerContext)(entryMessage: c.Expr[EntryMessage], result: c.Expr[R]): c.Expr[R] =
-    c.universe.reify(
-      c.prefix.splice.delegate.traceExit(entryMessage.splice, result.splice)
-    )
-
-  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.delegate.traceExit(message.splice, result.splice)  // TODO should not do ifEnabled check
-        }
-        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)
-    )
-
-}