If there's no binary compatibility between versions, it doesn't sound like it's even possible to run both version 10 and 11 at the same time.
On 29 October 2015 at 13:39, Gary Gregory <[email protected]> wrote: > So users will have to resolve dependencies if one jar depends on our > version 10 and another jar depends on version 11, right? > > Would it ever be possible for two of our Scala jars to run in the same > classloader (right now, no, since they have the same Java package). > > Gary > > On Thu, Oct 29, 2015 at 9:09 AM, Mikael Ståldal <[email protected] > > 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 <[email protected]> >> wrote: >> >>> Will the packages also have a version in the name? >>> >>> Gary >>> On Oct 29, 2015 2:28 AM, "Mikael Ståldal" <[email protected]> >>> 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 <[email protected]> >>>> 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: <[email protected]> >>>>> Date: Wed, Oct 28, 2015 at 10:08 AM >>>>> Subject: logging-log4j2 git commit: Scala 2.11 logging >>>>> To: [email protected] >>>>> >>>>> >>>>> 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 <[email protected]> >>>>> Authored: Wed Oct 28 18:07:39 2015 +0100 >>>>> Committer: Mikael Ståldal <[email protected]> >>>>> 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: [email protected] | [email protected] >>>>> 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* >>>> [email protected] >>>> 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* >> [email protected] >> 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. >> > > > > -- > E-Mail: [email protected] | [email protected] > 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 > -- Matt Sicker <[email protected]>
