Most Scala users are using the SBT build tool, and it will guarantee it when used properly:
http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Cross-Build.html On Thu, Oct 29, 2015 at 5:42 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote: > So how do you prevent users from having both log4j-scala_2.11 and > log4j_scala_2.12, etc in the application at the same time? > > Ralph > > On Oct 29, 2015, at 9:09 AM, Mikael Ståldal <mikael.stal...@magine.com> > wrote: > > The Java package will be the same (org.apache.logging.log4j.scala), no > version in there. > > On Thu, Oct 29, 2015 at 5:06 PM, Gary Gregory <garydgreg...@gmail.com> > wrote: > >> Will the packages also have a version in the name? >> >> Gary >> On Oct 29, 2015 2:28 AM, "Mikael Ståldal" <mikael.stal...@magine.com> >> wrote: >> >>> The "_2.11" (and "_2.10" etc) suffix on Maven artifact IDs is the Scala >>> convention, and it is even implemented in the Scala build tool SBT. If we >>> use "-2.11" we break that. >>> >>> http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Cross-Build.html >>> >>> On Wed, Oct 28, 2015 at 7:57 PM, Gary Gregory <garydgreg...@gmail.com> >>> wrote: >>> >>>> Hi all, >>>> >>>> I find it confusing that we use two formats for versions in names: >>>> >>>> - log4j-scala_2.11 >>>> - log4j-1.2-api >>>> >>>> Shouldn't we have log4j-scala-2.11? >>>> >>>> Gary >>>> >>>> ---------- Forwarded message ---------- >>>> From: <mi...@apache.org> >>>> Date: Wed, Oct 28, 2015 at 10:08 AM >>>> Subject: logging-log4j2 git commit: Scala 2.11 logging >>>> To: comm...@logging.apache.org >>>> >>>> >>>> Repository: logging-log4j2 >>>> Updated Branches: >>>> refs/heads/LOG4J-1181 [created] 968058160 >>>> >>>> >>>> Scala 2.11 logging >>>> >>>> >>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >>>> Commit: >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/96805816 >>>> Tree: >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/96805816 >>>> Diff: >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/96805816 >>>> >>>> Branch: refs/heads/LOG4J-1181 >>>> Commit: 9680581602af65eaee778e85affa9e4926acf1a2 >>>> Parents: fdce364 >>>> Author: Mikael Ståldal <mikael.stal...@magine.com> >>>> Authored: Wed Oct 28 18:07:39 2015 +0100 >>>> Committer: Mikael Ståldal <mikael.stal...@magine.com> >>>> Committed: Wed Oct 28 18:07:39 2015 +0100 >>>> >>>> ---------------------------------------------------------------------- >>>> log4j-scala_2.11/pom.xml | 254 >>>> +++++++++++++++++++ >>>> .../org/apache/logging/log4j/scala/Logger.scala | 211 +++++++++++++++ >>>> .../logging/log4j/scala/LoggerMacro.scala | 217 ++++++++++++++++ >>>> .../apache/logging/log4j/scala/Logging.scala | 10 + >>>> pom.xml | 6 + >>>> 5 files changed, 698 insertions(+) >>>> ---------------------------------------------------------------------- >>>> >>>> >>>> >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/pom.xml >>>> ---------------------------------------------------------------------- >>>> diff --git a/log4j-scala_2.11/pom.xml b/log4j-scala_2.11/pom.xml >>>> new file mode 100644 >>>> index 0000000..81132c4 >>>> --- /dev/null >>>> +++ b/log4j-scala_2.11/pom.xml >>>> @@ -0,0 +1,254 @@ >>>> +<?xml version="1.0" encoding="UTF-8"?> >>>> +<!-- >>>> + 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. >>>> +--> >>>> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" >>>> http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" >>>> http://maven.apache.org/POM/4.0.0 >>>> http://maven.apache.org/xsd/maven-4.0.0.xsd"> >>>> + <modelVersion>4.0.0</modelVersion> >>>> + <parent> >>>> + <groupId>org.apache.logging.log4j</groupId> >>>> + <artifactId>log4j</artifactId> >>>> + <version>2.5-SNAPSHOT</version> >>>> + <relativePath>../</relativePath> >>>> + </parent> >>>> + <artifactId>log4j-scala_2.11</artifactId> >>>> + <packaging>jar</packaging> >>>> + <name>Scala warpper for Log4j API</name> >>>> + <description>Scala warpper for Log4j API</description> >>>> + <properties> >>>> + <log4jParentDir>${basedir}/..</log4jParentDir> >>>> + <projectDir>/scala_2.11</projectDir> >>>> + <scala.version>2.11.7</scala.version> >>>> + </properties> >>>> + <dependencies> >>>> + <dependency> >>>> + <groupId>org.apache.logging.log4j</groupId> >>>> + <artifactId>log4j-api</artifactId> >>>> + </dependency> >>>> + <dependency> >>>> + <groupId>org.scala-lang</groupId> >>>> + <artifactId>scala-library</artifactId> >>>> + <version>${scala.version}</version> >>>> + </dependency> >>>> + <dependency> >>>> + <groupId>org.scala-lang</groupId> >>>> + <artifactId>scala-reflect</artifactId> >>>> + <version>${scala.version}</version> >>>> + </dependency> >>>> + <dependency> >>>> + <groupId>org.apache.logging.log4j</groupId> >>>> + <artifactId>log4j-api</artifactId> >>>> + <type>test-jar</type> >>>> + <scope>test</scope> >>>> + </dependency> >>>> + <dependency> >>>> + <groupId>org.apache.logging.log4j</groupId> >>>> + <artifactId>log4j-core</artifactId> >>>> + <scope>test</scope> >>>> + </dependency> >>>> + <dependency> >>>> + <groupId>org.apache.logging.log4j</groupId> >>>> + <artifactId>log4j-core</artifactId> >>>> + <type>test-jar</type> >>>> + <scope>test</scope> >>>> + </dependency> >>>> + <dependency> >>>> + <groupId>junit</groupId> >>>> + <artifactId>junit</artifactId> >>>> + <scope>test</scope> >>>> + </dependency> >>>> + </dependencies> >>>> + <build> >>>> + <sourceDirectory>src/main/scala</sourceDirectory> >>>> + <testSourceDirectory>src/test/scala</testSourceDirectory> >>>> + <plugins> >>>> + <plugin> >>>> + <groupId>net.alchim31.maven</groupId> >>>> + <artifactId>scala-maven-plugin</artifactId> >>>> + <executions> >>>> + <execution> >>>> + <goals> >>>> + <goal>compile</goal> >>>> + <goal>testCompile</goal> >>>> + </goals> >>>> + </execution> >>>> + </executions> >>>> + </plugin> >>>> + <plugin> >>>> + <groupId>org.apache.maven.plugins</groupId> >>>> + <artifactId>maven-surefire-plugin</artifactId> >>>> + <configuration> >>>> + <excludes> >>>> + <exclude>**/*Test.java</exclude> >>>> + </excludes> >>>> + </configuration> >>>> + <executions> >>>> + <execution> >>>> + <id>default-tests</id> >>>> + <phase>test</phase> >>>> + <goals> >>>> + <goal>test</goal> >>>> + </goals> >>>> + <configuration> >>>> + <includes> >>>> + <include>**/*Test.java</include> >>>> + </includes> >>>> + <excludes> >>>> + <exclude>**/OptionalTest.java</exclude> >>>> + </excludes> >>>> + </configuration> >>>> + </execution> >>>> + <execution> >>>> + <id>test-optional</id> >>>> + <phase>test</phase> >>>> + <goals> >>>> + <goal>test</goal> >>>> + </goals> >>>> + <configuration> >>>> + <excludes> >>>> + <exclude>**/LoggerTest.java</exclude> >>>> + <exclude>**/MarkerTest.java</exclude> >>>> + <exclude>**/SerializeTest.java</exclude> >>>> + </excludes> >>>> + <includes> >>>> + <include>**/OptionalTest.java</include> >>>> + </includes> >>>> + </configuration> >>>> + </execution> >>>> + </executions> >>>> + </plugin> >>>> + <!-- Include the standard NOTICE and LICENSE --> >>>> + <plugin> >>>> + <groupId>org.apache.maven.plugins</groupId> >>>> + <artifactId>maven-remote-resources-plugin</artifactId> >>>> + <executions> >>>> + <execution> >>>> + <goals> >>>> + <goal>process</goal> >>>> + </goals> >>>> + <configuration> >>>> + <skip>false</skip> >>>> + </configuration> >>>> + </execution> >>>> + </executions> >>>> + </plugin> >>>> + <plugin> >>>> + <groupId>org.apache.felix</groupId> >>>> + <artifactId>maven-bundle-plugin</artifactId> >>>> + <configuration> >>>> + <instructions> >>>> + <Export-Package> >>>> + liquibase.ext.logging.log4j2 >>>> + </Export-Package> >>>> + </instructions> >>>> + </configuration> >>>> + </plugin> >>>> + </plugins> >>>> + </build> >>>> + <reporting> >>>> + <plugins> >>>> + <plugin> >>>> + <groupId>org.apache.maven.plugins</groupId> >>>> + <artifactId>maven-changes-plugin</artifactId> >>>> + <version>${changes.plugin.version}</version> >>>> + <reportSets> >>>> + <reportSet> >>>> + <reports> >>>> + <report>changes-report</report> >>>> + </reports> >>>> + </reportSet> >>>> + </reportSets> >>>> + <configuration> >>>> + >>>> <issueLinkTemplate>%URL%/show_bug.cgi?id=%ISSUE%</issueLinkTemplate> >>>> + <useJql>true</useJql> >>>> + </configuration> >>>> + </plugin> >>>> + <plugin> >>>> + <groupId>org.apache.maven.plugins</groupId> >>>> + <artifactId>maven-checkstyle-plugin</artifactId> >>>> + <version>${checkstyle.plugin.version}</version> >>>> + <configuration> >>>> + >>>> <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> >>>> --> >>>> + >>>> <configLocation>${log4jParentDir}/checkstyle.xml</configLocation> >>>> + >>>> <suppressionsLocation>${log4jParentDir}/checkstyle-suppressions.xml</suppressionsLocation> >>>> + <enableRulesSummary>false</enableRulesSummary> >>>> + <propertyExpansion>basedir=${basedir}</propertyExpansion> >>>> + >>>> <propertyExpansion>licensedir=${log4jParentDir}/checkstyle-header.txt</propertyExpansion> >>>> + </configuration> >>>> + </plugin> >>>> + <plugin> >>>> + <groupId>org.apache.maven.plugins</groupId> >>>> + <artifactId>maven-javadoc-plugin</artifactId> >>>> + <version>${javadoc.plugin.version}</version> >>>> + <configuration> >>>> + <bottom><![CDATA[<p align="center">Copyright © >>>> {inceptionYear}-{currentYear} {organizationName}. All Rights Reserved.<br >>>> /> >>>> + Apache Logging, Apache Log4j, Log4j, Apache, the Apache >>>> feather logo, the Apache Logging project logo, >>>> + and the Apache Log4j logo are trademarks of The Apache >>>> Software Foundation.</p>]]></bottom> >>>> + <!-- module link generation is completely broken in the >>>> javadoc plugin for a multi-module non-aggregating >>>> + project --> >>>> + <detectOfflineLinks>false</detectOfflineLinks> >>>> + <linksource>true</linksource> >>>> + </configuration> >>>> + <reportSets> >>>> + <reportSet> >>>> + <id>non-aggregate</id> >>>> + <reports> >>>> + <report>javadoc</report> >>>> + </reports> >>>> + </reportSet> >>>> + </reportSets> >>>> + </plugin> >>>> + <plugin> >>>> + <groupId>org.codehaus.mojo</groupId> >>>> + <artifactId>findbugs-maven-plugin</artifactId> >>>> + <version>${findbugs.plugin.version}</version> >>>> + <configuration> >>>> + <fork>true</fork> >>>> + <jvmArgs>-Duser.language=en</jvmArgs> >>>> + <threshold>Normal</threshold> >>>> + <effort>Default</effort> >>>> + >>>> <excludeFilterFile>${log4jParentDir}/findbugs-exclude-filter.xml</excludeFilterFile> >>>> + </configuration> >>>> + </plugin> >>>> + <plugin> >>>> + <groupId>org.apache.maven.plugins</groupId> >>>> + <artifactId>maven-jxr-plugin</artifactId> >>>> + <version>${jxr.plugin.version}</version> >>>> + <reportSets> >>>> + <reportSet> >>>> + <id>non-aggregate</id> >>>> + <reports> >>>> + <report>jxr</report> >>>> + </reports> >>>> + </reportSet> >>>> + <reportSet> >>>> + <id>aggregate</id> >>>> + <reports> >>>> + <report>aggregate</report> >>>> + </reports> >>>> + </reportSet> >>>> + </reportSets> >>>> + </plugin> >>>> + <plugin> >>>> + <groupId>org.apache.maven.plugins</groupId> >>>> + <artifactId>maven-pmd-plugin</artifactId> >>>> + <version>${pmd.plugin.version}</version> >>>> + <configuration> >>>> + <targetJdk>${maven.compile.target}</targetJdk> >>>> + </configuration> >>>> + </plugin> >>>> + </plugins> >>>> + </reporting> >>>> +</project> >>>> >>>> >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala >>>> ---------------------------------------------------------------------- >>>> diff --git >>>> a/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala >>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala >>>> new file mode 100644 >>>> index 0000000..63cce4d >>>> --- /dev/null >>>> +++ >>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala >>>> @@ -0,0 +1,211 @@ >>>> +package org.apache.logging.log4j.scala >>>> + >>>> +import org.apache.logging.log4j.message.Message >>>> +import org.apache.logging.log4j.spi.ExtendedLogger >>>> +import org.apache.logging.log4j.{Level, Marker} >>>> + >>>> +import scala.language.experimental.macros >>>> + >>>> +class Logger(val delegate: ExtendedLogger) { >>>> + >>>> + private final val FQCN = classOf[Logger].getName >>>> + >>>> + def fatal(marker: Marker, message: Message): Unit = >>>> + macro LoggerMacro.fatalMarkerMsg >>>> + >>>> + def fatal(marker: Marker, message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.fatalMarkerMsgThrowable >>>> + >>>> + def fatal(marker: Marker, message: String): Unit = >>>> + macro LoggerMacro.fatalMarkerString >>>> + >>>> + def fatal(marker: Marker, message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.fatalMarkerStringThrowable >>>> + >>>> + def fatal(message: Message): Unit = >>>> + macro LoggerMacro.fatalMsg >>>> + >>>> + def fatal(message: String): Unit = >>>> + macro LoggerMacro.fatalString >>>> + >>>> + def fatal(message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.fatalMsgThrowable >>>> + >>>> + def fatal(message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.fatalStringThrowable >>>> + >>>> + def error(marker: Marker, message: Message): Unit = >>>> + macro LoggerMacro.errorMarkerMsg >>>> + >>>> + def error(marker: Marker, message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.errorMarkerMsgThrowable >>>> + >>>> + def error(marker: Marker, message: String): Unit = >>>> + macro LoggerMacro.errorMarkerString >>>> + >>>> + def error(marker: Marker, message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.errorMarkerStringThrowable >>>> + >>>> + def error(message: Message): Unit = >>>> + macro LoggerMacro.errorMsg >>>> + >>>> + def error(message: String): Unit = >>>> + macro LoggerMacro.errorString >>>> + >>>> + def error(message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.errorMsgThrowable >>>> + >>>> + def error(message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.errorStringThrowable >>>> + >>>> + def warn(marker: Marker, message: Message): Unit = >>>> + macro LoggerMacro.warnMarkerMsg >>>> + >>>> + def warn(marker: Marker, message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.warnMarkerMsgThrowable >>>> + >>>> + def warn(marker: Marker, message: String): Unit = >>>> + macro LoggerMacro.warnMarkerString >>>> + >>>> + def warn(marker: Marker, message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.warnMarkerStringThrowable >>>> + >>>> + def warn(message: Message): Unit = >>>> + macro LoggerMacro.warnMsg >>>> + >>>> + def warn(message: String): Unit = >>>> + macro LoggerMacro.warnString >>>> + >>>> + def warn(message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.warnMsgThrowable >>>> + >>>> + def warn(message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.warnStringThrowable >>>> + >>>> + def info(marker: Marker, message: Message): Unit = >>>> + macro LoggerMacro.infoMarkerMsg >>>> + >>>> + def info(marker: Marker, message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.infoMarkerMsgThrowable >>>> + >>>> + def info(marker: Marker, message: String): Unit = >>>> + macro LoggerMacro.infoMarkerString >>>> + >>>> + def info(marker: Marker, message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.infoMarkerStringThrowable >>>> + >>>> + def info(message: Message): Unit = >>>> + macro LoggerMacro.infoMsg >>>> + >>>> + def info(message: String): Unit = >>>> + macro LoggerMacro.infoString >>>> + >>>> + def info(message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.infoMsgThrowable >>>> + >>>> + def info(message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.infoStringThrowable >>>> + >>>> + def debug(marker: Marker, message: Message): Unit = >>>> + macro LoggerMacro.debugMarkerMsg >>>> + >>>> + def debug(marker: Marker, message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.debugMarkerMsgThrowable >>>> + >>>> + def debug(marker: Marker, message: String): Unit = >>>> + macro LoggerMacro.debugMarkerString >>>> + >>>> + def debug(marker: Marker, message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.debugMarkerStringThrowable >>>> + >>>> + def debug(message: Message): Unit = >>>> + macro LoggerMacro.debugMsg >>>> + >>>> + def debug(message: String): Unit = >>>> + macro LoggerMacro.debugString >>>> + >>>> + def debug(message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.debugMsgThrowable >>>> + >>>> + def debug(message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.debugStringThrowable >>>> + >>>> + def trace(marker: Marker, message: Message): Unit = >>>> + macro LoggerMacro.traceMarkerMsg >>>> + >>>> + def trace(marker: Marker, message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.traceMarkerMsgThrowable >>>> + >>>> + def trace(marker: Marker, message: String): Unit = >>>> + macro LoggerMacro.traceMarkerString >>>> + >>>> + def trace(marker: Marker, message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.traceMarkerStringThrowable >>>> + >>>> + def trace(message: Message): Unit = >>>> + macro LoggerMacro.traceMsg >>>> + >>>> + def trace(message: String): Unit = >>>> + macro LoggerMacro.traceString >>>> + >>>> + def trace(message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.traceMsgThrowable >>>> + >>>> + def trace(message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.traceStringThrowable >>>> + >>>> + def log(level: Level, marker: Marker, message: Message): Unit = >>>> + macro LoggerMacro.logMarkerMsg >>>> + >>>> + def log(level: Level, marker: Marker, message: Message, cause: >>>> Throwable): Unit = >>>> + macro LoggerMacro.logMarkerMsgThrowable >>>> + >>>> + def log(level: Level, marker: Marker, message: String): Unit = >>>> + macro LoggerMacro.logMarkerString >>>> + >>>> + def log(level: Level, marker: Marker, message: String, cause: >>>> Throwable): Unit = >>>> + macro LoggerMacro.logMarkerStringThrowable >>>> + >>>> + def log(level: Level, message: Message): Unit = >>>> + macro LoggerMacro.logMsg >>>> + >>>> + def log(level: Level, message: String): Unit = >>>> + macro LoggerMacro.logString >>>> + >>>> + def log(level: Level, message: Message, cause: Throwable): Unit = >>>> + macro LoggerMacro.logMsgThrowable >>>> + >>>> + def log(level: Level, message: String, cause: Throwable): Unit = >>>> + macro LoggerMacro.logStringThrowable >>>> + >>>> + def isEnabled(level: Level): Boolean = delegate.isEnabled(level) >>>> + >>>> + def isEnabled(level: Level, marker: Marker): Boolean = >>>> delegate.isEnabled(level, marker) >>>> + >>>> + def level: Level = delegate.getLevel >>>> + >>>> + def name: String = delegate.getName >>>> + >>>> + /** Should normally not be used directly from application code, but >>>> needs to be public for access by macros. >>>> + * >>>> + * @param level log level >>>> + * @param marker marker or `null` >>>> + * @param message message >>>> + * @param cause cause or `null` >>>> + */ >>>> + def logMessage(level: Level, marker: Marker, message: Message, >>>> cause: Throwable): Unit = { >>>> + delegate.logIfEnabled(FQCN, level, marker, message, cause) >>>> + } >>>> + >>>> + /** Should normally not be used directly from application code, but >>>> needs to be public for access by macros. >>>> + * >>>> + * @param level log level >>>> + * @param marker marker or `null` >>>> + * @param message message >>>> + * @param cause cause or `null` >>>> + */ >>>> + def logMessage(level: Level, marker: Marker, message: String, cause: >>>> Throwable): Unit = { >>>> + delegate.logIfEnabled(FQCN, level, marker, message, cause) >>>> + } >>>> + >>>> +} >>>> >>>> >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala >>>> ---------------------------------------------------------------------- >>>> diff --git >>>> a/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala >>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala >>>> new file mode 100644 >>>> index 0000000..e8dfb3a >>>> --- /dev/null >>>> +++ >>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala >>>> @@ -0,0 +1,217 @@ >>>> +package org.apache.logging.log4j.scala >>>> + >>>> +import org.apache.logging.log4j.message.Message >>>> +import org.apache.logging.log4j.{Level, Marker} >>>> + >>>> +import scala.language.experimental.macros >>>> + >>>> +// Using the deprecated Context to be compatible with both Scala 2.10 >>>> and Scala 2.11 >>>> +//noinspection ScalaDeprecation >>>> +import scala.reflect.macros.Context >>>> + >>>> +//noinspection ScalaDeprecation >>>> +private object LoggerMacro { >>>> + >>>> + type LoggerContext = Context { type PrefixType = Logger } >>>> + >>>> + def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], >>>> message: c.Expr[Message]) = >>>> + logMarkerMsg(c)(c.universe.reify(Level.WARN), 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 fatalMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>> message: c.Expr[String]) = >>>> + logMarkerString(c)(c.universe.reify(Level.FATAL), marker, message) >>>> + >>>> + def fatalMarkerStringThrowable(c: LoggerContext)(marker: >>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>> + logMarkerStringThrowable(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 fatalMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>> cause: c.Expr[Throwable]) = >>>> + logMsgThrowable(c)(c.universe.reify(Level.FATAL), message, cause) >>>> + >>>> + def fatalString(c: LoggerContext)(message: c.Expr[String]) = >>>> + logString(c)(c.universe.reify(Level.FATAL), message) >>>> + >>>> + def fatalStringThrowable(c: LoggerContext)(message: c.Expr[String], >>>> cause: c.Expr[Throwable]) = >>>> + logStringThrowable(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 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 errorMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>> message: c.Expr[String]) = >>>> + logMarkerString(c)(c.universe.reify(Level.ERROR), marker, message) >>>> + >>>> + def errorMarkerStringThrowable(c: LoggerContext)(marker: >>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>> + logMarkerStringThrowable(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 errorMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>> cause: c.Expr[Throwable]) = >>>> + logMsgThrowable(c)(c.universe.reify(Level.ERROR), message, cause) >>>> + >>>> + def errorString(c: LoggerContext)(message: c.Expr[String]) = >>>> + logString(c)(c.universe.reify(Level.ERROR), message) >>>> + >>>> + def errorStringThrowable(c: LoggerContext)(message: c.Expr[String], >>>> cause: c.Expr[Throwable]) = >>>> + logStringThrowable(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 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 warnMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>> message: c.Expr[String]) = >>>> + logMarkerString(c)(c.universe.reify(Level.WARN), marker, message) >>>> + >>>> + def warnMarkerStringThrowable(c: LoggerContext)(marker: >>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>> + logMarkerStringThrowable(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 warnMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>> cause: c.Expr[Throwable]) = >>>> + logMsgThrowable(c)(c.universe.reify(Level.WARN), message, cause) >>>> + >>>> + def warnString(c: LoggerContext)(message: c.Expr[String]) = >>>> + logString(c)(c.universe.reify(Level.WARN), message) >>>> + >>>> + def warnStringThrowable(c: LoggerContext)(message: c.Expr[String], >>>> cause: c.Expr[Throwable]) = >>>> + logStringThrowable(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 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 infoMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>> message: c.Expr[String]) = >>>> + logMarkerString(c)(c.universe.reify(Level.INFO), marker, message) >>>> + >>>> + def infoMarkerStringThrowable(c: LoggerContext)(marker: >>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>> + logMarkerStringThrowable(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 infoMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>> cause: c.Expr[Throwable]) = >>>> + logMsgThrowable(c)(c.universe.reify(Level.INFO), message, cause) >>>> + >>>> + def infoString(c: LoggerContext)(message: c.Expr[String]) = >>>> + logString(c)(c.universe.reify(Level.INFO), message) >>>> + >>>> + def infoStringThrowable(c: LoggerContext)(message: c.Expr[String], >>>> cause: c.Expr[Throwable]) = >>>> + logStringThrowable(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 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 debugMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>> message: c.Expr[String]) = >>>> + logMarkerString(c)(c.universe.reify(Level.DEBUG), marker, message) >>>> + >>>> + def debugMarkerStringThrowable(c: LoggerContext)(marker: >>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>> + logMarkerStringThrowable(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 debugMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>> cause: c.Expr[Throwable]) = >>>> + logMsgThrowable(c)(c.universe.reify(Level.DEBUG), message, cause) >>>> + >>>> + def debugString(c: LoggerContext)(message: c.Expr[String]) = >>>> + logString(c)(c.universe.reify(Level.DEBUG), message) >>>> + >>>> + def debugStringThrowable(c: LoggerContext)(message: c.Expr[String], >>>> cause: c.Expr[Throwable]) = >>>> + logStringThrowable(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 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 traceMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>> message: c.Expr[String]) = >>>> + logMarkerString(c)(c.universe.reify(Level.TRACE), marker, message) >>>> + >>>> + def traceMarkerStringThrowable(c: LoggerContext)(marker: >>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>> + logMarkerStringThrowable(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 traceMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>> cause: c.Expr[Throwable]) = >>>> + logMsgThrowable(c)(c.universe.reify(Level.TRACE), message, cause) >>>> + >>>> + def traceString(c: LoggerContext)(message: c.Expr[String]) = >>>> + logString(c)(c.universe.reify(Level.TRACE), message) >>>> + >>>> + def traceStringThrowable(c: LoggerContext)(message: c.Expr[String], >>>> cause: c.Expr[Throwable]) = >>>> + logStringThrowable(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 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 logMarkerString(c: LoggerContext)(level: c.Expr[Level], marker: >>>> c.Expr[Marker], message: c.Expr[String]) = >>>> + 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 logMarkerStringThrowable(c: LoggerContext)(level: c.Expr[Level], >>>> marker: c.Expr[Marker], message: c.Expr[String], 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 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 logString(c: LoggerContext)(level: c.Expr[Level], message: >>>> c.Expr[String]) = >>>> + c.universe.reify( >>>> + if (c.prefix.splice.delegate.isEnabled(level.splice)) { >>>> + c.prefix.splice.logMessage(level.splice, null, message.splice, >>>> null) >>>> + } >>>> + ) >>>> + >>>> + def logStringThrowable(c: LoggerContext)(level: c.Expr[Level], >>>> message: c.Expr[String], 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) >>>> + } >>>> + ) >>>> + >>>> +} >>>> >>>> >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logging.scala >>>> ---------------------------------------------------------------------- >>>> diff --git >>>> a/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logging.scala >>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logging.scala >>>> new file mode 100644 >>>> index 0000000..0b3d03d >>>> --- /dev/null >>>> +++ >>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logging.scala >>>> @@ -0,0 +1,10 @@ >>>> +package org.apache.logging.log4j.scala >>>> + >>>> +import org.apache.logging.log4j.LogManager >>>> + >>>> +trait Logging { >>>> + >>>> + protected lazy val logger: Logger = >>>> + new Logger(LogManager.getContext(getClass.getClassLoader, >>>> false).getLogger(getClass.getName)) >>>> + >>>> +} >>>> \ No newline at end of file >>>> >>>> >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/pom.xml >>>> ---------------------------------------------------------------------- >>>> diff --git a/pom.xml b/pom.xml >>>> index b62f935..84cca69 100644 >>>> --- a/pom.xml >>>> +++ b/pom.xml >>>> @@ -1131,6 +1131,11 @@ >>>> </excludes> >>>> </configuration> >>>> </plugin> >>>> + <plugin> >>>> + <groupId>net.alchim31.maven</groupId> >>>> + <artifactId>scala-maven-plugin</artifactId> >>>> + <version>3.2.2</version> >>>> + </plugin> >>>> </plugins> >>>> </reporting> >>>> <distributionManagement> >>>> @@ -1167,6 +1172,7 @@ >>>> <module>log4j-iostreams</module> >>>> <module>log4j-jul</module> >>>> <module>log4j-liquibase</module> >>>> + <module>log4j-scala_2.11</module> >>>> </modules> >>>> <profiles> >>>> <profile> >>>> >>>> >>>> >>>> >>>> -- >>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>> Java Persistence with Hibernate, Second Edition >>>> <http://www.manning.com/bauer3/> >>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>> Spring Batch in Action <http://www.manning.com/templier/> >>>> Blog: http://garygregory.wordpress.com >>>> Home: http://garygregory.com/ >>>> Tweet! http://twitter.com/GaryGregory >>>> >>> >>> >>> >>> -- >>> [image: MagineTV] >>> >>> *Mikael Ståldal* >>> Senior software developer >>> >>> *Magine TV* >>> mikael.stal...@magine.com >>> Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com >>> >>> Privileged and/or Confidential Information may be contained in this >>> message. If you are not the addressee indicated in this message >>> (or responsible for delivery of the message to such a person), you may >>> not copy or deliver this message to anyone. In such case, >>> you should destroy this message and kindly notify the sender by reply >>> email. >>> >> > > > -- > [image: MagineTV] > > *Mikael Ståldal* > Senior software developer > > *Magine TV* > mikael.stal...@magine.com > Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com > > Privileged and/or Confidential Information may be contained in this > message. If you are not the addressee indicated in this message > (or responsible for delivery of the message to such a person), you may not > copy or deliver this message to anyone. In such case, > you should destroy this message and kindly notify the sender by reply > email. > > > -- [image: MagineTV] *Mikael Ståldal* Senior software developer *Magine TV* mikael.stal...@magine.com Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com Privileged and/or Confidential Information may be contained in this message. If you are not the addressee indicated in this message (or responsible for delivery of the message to such a person), you may not copy or deliver this message to anyone. In such case, you should destroy this message and kindly notify the sender by reply email.