Skip to content

Commit 138c667

Browse files
committed
Backport macros to simultaneously support Scala 2.10.x.
1 parent 28fd16b commit 138c667

File tree

5 files changed

+196
-9
lines changed

5 files changed

+196
-9
lines changed

project/Common.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ object Common {
1414
scalariformSettings ++
1515
List(
1616
organization := "com.typesafe.scala-logging",
17-
scalaVersion := Version.scala,
18-
crossScalaVersions := List(scalaVersion.value),
17+
scalaVersion := Version.scala.head,
18+
crossScalaVersions := Version.scala,
1919
scalacOptions ++= List(
2020
"-unchecked",
2121
"-deprecation",

project/Dependencies.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import sbt._
22

33
object Version {
4-
val scala = "2.11.0"
4+
val scala = List("2.11.0", "2.10.4")
55
val slf4j = "1.7.7"
66
val logback = "1.1.2"
77
val scalaTest = "2.1.3"
88
val mockito = "1.9.5"
99
}
1010

1111
object Library {
12-
val scalaReflect = "org.scala-lang" % "scala-reflect" % Version.scala
12+
val scalaReflect = "org.scala-lang" % "scala-reflect"
1313
val slf4jApi = "org.slf4j" % "slf4j-api" % Version.slf4j
1414
val logbackClassic = "ch.qos.logback" % "logback-classic" % Version.logback
1515
val scalaTest = "org.scalatest" %% "scalatest" % Version.scalaTest
@@ -23,8 +23,8 @@ object Dependencies {
2323
val scalaLoggingApi = List(
2424
)
2525

26-
val scalaLoggingSlf4j = List(
27-
scalaReflect,
26+
def scalaLoggingSlf4j(scalaVersion: String) = List(
27+
scalaReflect % scalaVersion,
2828
slf4jApi,
2929
scalaTest % "test",
3030
mockitoAll % "test",

scala-logging-slf4j/build.sbt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
Common.settings
22

3-
libraryDependencies ++= Dependencies.scalaLoggingSlf4j
3+
libraryDependencies ++= Dependencies.scalaLoggingSlf4j(scalaVersion.value)
4+
5+
unmanagedSourceDirectories in Compile += (sourceDirectory in Compile).value / s"scala_${scalaBinaryVersion.value}"
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
package com.typesafe.scalalogging.slf4j
2+
3+
import org.slf4j.Marker
4+
import scala.reflect.macros.Context
5+
import scala.annotation.switch
6+
7+
private object LoggerMacro {
8+
9+
type LoggerContext = Context { type PrefixType = Logger }
10+
11+
// Error
12+
13+
def errorMessage(c: LoggerContext)(message: c.Expr[String]) =
14+
c.universe.reify(
15+
if (c.prefix.splice.underlying.isErrorEnabled)
16+
c.prefix.splice.underlying.error(message.splice)
17+
)
18+
19+
def errorMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[AnyRef]*) =
20+
(args.length: @switch) match {
21+
case 1 =>
22+
c.universe.reify(
23+
if (c.prefix.splice.underlying.isErrorEnabled)
24+
LoggerSupport.error(c.prefix.splice.underlying, message.splice, args(0).splice)
25+
)
26+
case 2 =>
27+
c.universe.reify(
28+
if (c.prefix.splice.underlying.isErrorEnabled)
29+
LoggerSupport.error(c.prefix.splice.underlying, message.splice, args(0).splice, args(1).splice)
30+
)
31+
case _ =>
32+
logParams(c)(message, args)("error")
33+
}
34+
35+
def errorMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) =
36+
c.universe.reify(
37+
if (c.prefix.splice.underlying.isErrorEnabled)
38+
c.prefix.splice.underlying.error(message.splice, cause.splice)
39+
)
40+
41+
// Warn
42+
43+
def warnMessage(c: LoggerContext)(message: c.Expr[String]) =
44+
c.universe.reify(
45+
if (c.prefix.splice.underlying.isWarnEnabled)
46+
c.prefix.splice.underlying.warn(message.splice)
47+
)
48+
49+
def warnMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[AnyRef]*) =
50+
(args.length: @switch) match {
51+
case 1 =>
52+
c.universe.reify(
53+
if (c.prefix.splice.underlying.isWarnEnabled)
54+
LoggerSupport.warn(c.prefix.splice.underlying, message.splice, args(0).splice)
55+
)
56+
case 2 =>
57+
c.universe.reify(
58+
if (c.prefix.splice.underlying.isWarnEnabled)
59+
LoggerSupport.warn(c.prefix.splice.underlying, message.splice, args(0).splice, args(1).splice)
60+
)
61+
case _ =>
62+
logParams(c)(message, args)("warn")
63+
}
64+
65+
def warnMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) =
66+
c.universe.reify(
67+
if (c.prefix.splice.underlying.isWarnEnabled)
68+
c.prefix.splice.underlying.warn(message.splice, cause.splice)
69+
)
70+
71+
// Info
72+
73+
def infoMessage(c: LoggerContext)(message: c.Expr[String]) =
74+
c.universe.reify(
75+
if (c.prefix.splice.underlying.isInfoEnabled)
76+
c.prefix.splice.underlying.info(message.splice)
77+
)
78+
79+
def infoMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[AnyRef]*) =
80+
(args.length: @switch) match {
81+
case 1 =>
82+
c.universe.reify(
83+
if (c.prefix.splice.underlying.isInfoEnabled)
84+
LoggerSupport.info(c.prefix.splice.underlying, message.splice, args(0).splice)
85+
)
86+
case 2 =>
87+
c.universe.reify(
88+
if (c.prefix.splice.underlying.isInfoEnabled)
89+
LoggerSupport.info(c.prefix.splice.underlying, message.splice, args(0).splice, args(1).splice)
90+
)
91+
case _ =>
92+
logParams(c)(message, args)("info")
93+
}
94+
95+
def infoMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) =
96+
c.universe.reify(
97+
if (c.prefix.splice.underlying.isInfoEnabled)
98+
c.prefix.splice.underlying.info(message.splice, cause.splice)
99+
)
100+
101+
// Debug
102+
103+
def debugMessage(c: LoggerContext)(message: c.Expr[String]) =
104+
c.universe.reify(
105+
if (c.prefix.splice.underlying.isDebugEnabled)
106+
c.prefix.splice.underlying.debug(message.splice)
107+
)
108+
109+
def debugMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[AnyRef]*) =
110+
(args.length: @switch) match {
111+
case 1 =>
112+
c.universe.reify(
113+
if (c.prefix.splice.underlying.isDebugEnabled)
114+
LoggerSupport.debug(c.prefix.splice.underlying, message.splice, args(0).splice)
115+
)
116+
case 2 =>
117+
c.universe.reify(
118+
if (c.prefix.splice.underlying.isDebugEnabled)
119+
LoggerSupport.debug(c.prefix.splice.underlying, message.splice, args(0).splice, args(1).splice)
120+
)
121+
case _ =>
122+
logParams(c)(message, args)("debug")
123+
}
124+
125+
def debugMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) =
126+
c.universe.reify(
127+
if (c.prefix.splice.underlying.isDebugEnabled)
128+
c.prefix.splice.underlying.debug(message.splice, cause.splice)
129+
)
130+
131+
// Trace
132+
133+
def traceMessage(c: LoggerContext)(message: c.Expr[String]) =
134+
c.universe.reify(
135+
if (c.prefix.splice.underlying.isTraceEnabled)
136+
c.prefix.splice.underlying.trace(message.splice)
137+
)
138+
139+
def traceMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[AnyRef]*) =
140+
(args.length: @switch) match {
141+
case 1 =>
142+
c.universe.reify(
143+
if (c.prefix.splice.underlying.isTraceEnabled)
144+
LoggerSupport.trace(c.prefix.splice.underlying, message.splice, args(0).splice)
145+
)
146+
case 2 =>
147+
c.universe.reify(
148+
if (c.prefix.splice.underlying.isTraceEnabled)
149+
LoggerSupport.trace(c.prefix.splice.underlying, message.splice, args(0).splice, args(1).splice)
150+
)
151+
case _ =>
152+
logParams(c)(message, args)("trace")
153+
}
154+
155+
def traceMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) =
156+
c.universe.reify(
157+
if (c.prefix.splice.underlying.isTraceEnabled)
158+
c.prefix.splice.underlying.trace(message.splice, cause.splice)
159+
)
160+
161+
// Common
162+
163+
private def logParams(
164+
c: LoggerContext)(
165+
message: c.Expr[String],
166+
params: Seq[c.Expr[AnyRef]])(
167+
level: String) = {
168+
import c.universe._
169+
val isEnabled = Select(
170+
Select(c.prefix.tree, newTermName("underlying")),
171+
newTermName(s"is${level.head.toUpper +: level.tail}Enabled")
172+
)
173+
val paramsWildcard = Typed(
174+
Apply(
175+
Ident(newTermName("List")),
176+
(params map (_.tree)).toList
177+
),
178+
Ident(tpnme.WILDCARD_STAR)
179+
)
180+
val log = Apply(
181+
Select(Select(c.prefix.tree, newTermName("underlying")), newTermName(level)),
182+
message.tree +: List(paramsWildcard)
183+
)
184+
c.Expr(If(isEnabled, log, Literal(Constant(()))))
185+
}
186+
}

scala-logging-slf4j/src/main/scala/com/typesafe/scalalogging/slf4j/LoggerMacro.scala renamed to scala-logging-slf4j/src/main/scala_2.11/com/typesafe/scalalogging/slf4j/LoggerMacro.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.typesafe.scalalogging
18-
package slf4j
17+
package com.typesafe.scalalogging.slf4j
1918

2019
import scala.annotation.switch
2120
import scala.reflect.macros.blackbox.Context

0 commit comments

Comments
 (0)