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 &#169;
>>>> {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

Reply via email to