A lot of Scala libraries does like this. On Fri, Oct 30, 2015 at 4:45 AM, Gary Gregory <[email protected]> wrote:
> If that is the case so far, then that's that! We can deal with compatible > versions in the future... > > Gary > On Oct 29, 2015 1:35 PM, "Matt Sicker" <[email protected]> wrote: > >> 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]> >> > -- [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.
