Most Scala users are using the SBT build tool, and it will guarantee it
when used properly:

http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Cross-Build.html

On Thu, Oct 29, 2015 at 5:42 PM, Ralph Goers <ralph.go...@dslextreme.com>
wrote:

> So how do you prevent users from having both log4j-scala_2.11 and
> log4j_scala_2.12, etc in the application at the same time?
>
> Ralph
>
> On Oct 29, 2015, at 9:09 AM, Mikael Ståldal <mikael.stal...@magine.com>
> wrote:
>
> The Java package will be the same (org.apache.logging.log4j.scala), no
> version in there.
>
> On Thu, Oct 29, 2015 at 5:06 PM, Gary Gregory <garydgreg...@gmail.com>
> wrote:
>
>> Will the packages also have a version in the name?
>>
>> Gary
>> On Oct 29, 2015 2:28 AM, "Mikael Ståldal" <mikael.stal...@magine.com>
>> wrote:
>>
>>> The "_2.11" (and "_2.10" etc) suffix on Maven artifact IDs is the Scala
>>> convention, and it is even implemented in the Scala build tool SBT. If we
>>> use "-2.11" we break that.
>>>
>>> http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Cross-Build.html
>>>
>>> On Wed, Oct 28, 2015 at 7:57 PM, Gary Gregory <garydgreg...@gmail.com>
>>> wrote:
>>>
>>>> Hi all,
>>>>
>>>> I find it confusing that we use two formats for versions in names:
>>>>
>>>> - log4j-scala_2.11
>>>> - log4j-1.2-api
>>>>
>>>> Shouldn't we have log4j-scala-2.11?
>>>>
>>>> Gary
>>>>
>>>> ---------- Forwarded message ----------
>>>> From: <mi...@apache.org>
>>>> Date: Wed, Oct 28, 2015 at 10:08 AM
>>>> Subject: logging-log4j2 git commit: Scala 2.11 logging
>>>> To: comm...@logging.apache.org
>>>>
>>>>
>>>> Repository: logging-log4j2
>>>> Updated Branches:
>>>>   refs/heads/LOG4J-1181 [created] 968058160
>>>>
>>>>
>>>> Scala 2.11 logging
>>>>
>>>>
>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>> Commit:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/96805816
>>>> Tree:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/96805816
>>>> Diff:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/96805816
>>>>
>>>> Branch: refs/heads/LOG4J-1181
>>>> Commit: 9680581602af65eaee778e85affa9e4926acf1a2
>>>> Parents: fdce364
>>>> Author: Mikael Ståldal <mikael.stal...@magine.com>
>>>> Authored: Wed Oct 28 18:07:39 2015 +0100
>>>> Committer: Mikael Ståldal <mikael.stal...@magine.com>
>>>> Committed: Wed Oct 28 18:07:39 2015 +0100
>>>>
>>>> ----------------------------------------------------------------------
>>>>  log4j-scala_2.11/pom.xml                        | 254
>>>> +++++++++++++++++++
>>>>  .../org/apache/logging/log4j/scala/Logger.scala | 211 +++++++++++++++
>>>>  .../logging/log4j/scala/LoggerMacro.scala       | 217 ++++++++++++++++
>>>>  .../apache/logging/log4j/scala/Logging.scala    |  10 +
>>>>  pom.xml                                         |   6 +
>>>>  5 files changed, 698 insertions(+)
>>>> ----------------------------------------------------------------------
>>>>
>>>>
>>>>
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/pom.xml
>>>> ----------------------------------------------------------------------
>>>> diff --git a/log4j-scala_2.11/pom.xml b/log4j-scala_2.11/pom.xml
>>>> new file mode 100644
>>>> index 0000000..81132c4
>>>> --- /dev/null
>>>> +++ b/log4j-scala_2.11/pom.xml
>>>> @@ -0,0 +1,254 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +<!--
>>>> + Licensed to the Apache Software Foundation (ASF) under one or more
>>>> + contributor license agreements.  See the NOTICE file distributed with
>>>> + this work for additional information regarding copyright ownership.
>>>> + The ASF licenses this file to You under the Apache License, Version
>>>> 2.0
>>>> + (the "License"); you may not use this file except in compliance with
>>>> + the License.  You may obtain a copy of the License at
>>>> +
>>>> +      http://www.apache.org/licenses/LICENSE-2.0
>>>> +
>>>> + Unless required by applicable law or agreed to in writing, software
>>>> + distributed under the License is distributed on an "AS IS" BASIS,
>>>> + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>> implied.
>>>> + See the License for the specific language governing permissions and
>>>> + limitations under the License.
>>>> +-->
>>>> +<project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="
>>>> http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="
>>>> http://maven.apache.org/POM/4.0.0
>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd";>
>>>> +  <modelVersion>4.0.0</modelVersion>
>>>> +  <parent>
>>>> +    <groupId>org.apache.logging.log4j</groupId>
>>>> +    <artifactId>log4j</artifactId>
>>>> +    <version>2.5-SNAPSHOT</version>
>>>> +    <relativePath>../</relativePath>
>>>> +  </parent>
>>>> +  <artifactId>log4j-scala_2.11</artifactId>
>>>> +  <packaging>jar</packaging>
>>>> +  <name>Scala warpper for Log4j API</name>
>>>> +  <description>Scala warpper for Log4j API</description>
>>>> +  <properties>
>>>> +    <log4jParentDir>${basedir}/..</log4jParentDir>
>>>> +    <projectDir>/scala_2.11</projectDir>
>>>> +    <scala.version>2.11.7</scala.version>
>>>> +  </properties>
>>>> +  <dependencies>
>>>> +    <dependency>
>>>> +      <groupId>org.apache.logging.log4j</groupId>
>>>> +      <artifactId>log4j-api</artifactId>
>>>> +    </dependency>
>>>> +    <dependency>
>>>> +      <groupId>org.scala-lang</groupId>
>>>> +      <artifactId>scala-library</artifactId>
>>>> +      <version>${scala.version}</version>
>>>> +    </dependency>
>>>> +    <dependency>
>>>> +      <groupId>org.scala-lang</groupId>
>>>> +      <artifactId>scala-reflect</artifactId>
>>>> +      <version>${scala.version}</version>
>>>> +    </dependency>
>>>> +    <dependency>
>>>> +      <groupId>org.apache.logging.log4j</groupId>
>>>> +      <artifactId>log4j-api</artifactId>
>>>> +      <type>test-jar</type>
>>>> +      <scope>test</scope>
>>>> +    </dependency>
>>>> +    <dependency>
>>>> +      <groupId>org.apache.logging.log4j</groupId>
>>>> +      <artifactId>log4j-core</artifactId>
>>>> +      <scope>test</scope>
>>>> +    </dependency>
>>>> +    <dependency>
>>>> +      <groupId>org.apache.logging.log4j</groupId>
>>>> +      <artifactId>log4j-core</artifactId>
>>>> +      <type>test-jar</type>
>>>> +      <scope>test</scope>
>>>> +    </dependency>
>>>> +    <dependency>
>>>> +      <groupId>junit</groupId>
>>>> +      <artifactId>junit</artifactId>
>>>> +      <scope>test</scope>
>>>> +    </dependency>
>>>> +  </dependencies>
>>>> +  <build>
>>>> +    <sourceDirectory>src/main/scala</sourceDirectory>
>>>> +    <testSourceDirectory>src/test/scala</testSourceDirectory>
>>>> +    <plugins>
>>>> +      <plugin>
>>>> +        <groupId>net.alchim31.maven</groupId>
>>>> +        <artifactId>scala-maven-plugin</artifactId>
>>>> +        <executions>
>>>> +          <execution>
>>>> +            <goals>
>>>> +              <goal>compile</goal>
>>>> +              <goal>testCompile</goal>
>>>> +            </goals>
>>>> +          </execution>
>>>> +        </executions>
>>>> +      </plugin>
>>>> +      <plugin>
>>>> +        <groupId>org.apache.maven.plugins</groupId>
>>>> +        <artifactId>maven-surefire-plugin</artifactId>
>>>> +        <configuration>
>>>> +          <excludes>
>>>> +            <exclude>**/*Test.java</exclude>
>>>> +          </excludes>
>>>> +        </configuration>
>>>> +        <executions>
>>>> +          <execution>
>>>> +            <id>default-tests</id>
>>>> +            <phase>test</phase>
>>>> +            <goals>
>>>> +              <goal>test</goal>
>>>> +            </goals>
>>>> +            <configuration>
>>>> +              <includes>
>>>> +                <include>**/*Test.java</include>
>>>> +              </includes>
>>>> +              <excludes>
>>>> +                <exclude>**/OptionalTest.java</exclude>
>>>> +              </excludes>
>>>> +            </configuration>
>>>> +          </execution>
>>>> +          <execution>
>>>> +            <id>test-optional</id>
>>>> +            <phase>test</phase>
>>>> +            <goals>
>>>> +              <goal>test</goal>
>>>> +            </goals>
>>>> +            <configuration>
>>>> +              <excludes>
>>>> +                <exclude>**/LoggerTest.java</exclude>
>>>> +                <exclude>**/MarkerTest.java</exclude>
>>>> +                <exclude>**/SerializeTest.java</exclude>
>>>> +              </excludes>
>>>> +              <includes>
>>>> +                <include>**/OptionalTest.java</include>
>>>> +              </includes>
>>>> +            </configuration>
>>>> +          </execution>
>>>> +        </executions>
>>>> +      </plugin>
>>>> +      <!-- Include the standard NOTICE and LICENSE -->
>>>> +      <plugin>
>>>> +        <groupId>org.apache.maven.plugins</groupId>
>>>> +        <artifactId>maven-remote-resources-plugin</artifactId>
>>>> +        <executions>
>>>> +          <execution>
>>>> +            <goals>
>>>> +              <goal>process</goal>
>>>> +            </goals>
>>>> +            <configuration>
>>>> +              <skip>false</skip>
>>>> +            </configuration>
>>>> +          </execution>
>>>> +        </executions>
>>>> +      </plugin>
>>>> +      <plugin>
>>>> +        <groupId>org.apache.felix</groupId>
>>>> +        <artifactId>maven-bundle-plugin</artifactId>
>>>> +        <configuration>
>>>> +          <instructions>
>>>> +            <Export-Package>
>>>> +              liquibase.ext.logging.log4j2
>>>> +            </Export-Package>
>>>> +          </instructions>
>>>> +        </configuration>
>>>> +      </plugin>
>>>> +    </plugins>
>>>> +  </build>
>>>> +  <reporting>
>>>> +    <plugins>
>>>> +      <plugin>
>>>> +        <groupId>org.apache.maven.plugins</groupId>
>>>> +        <artifactId>maven-changes-plugin</artifactId>
>>>> +        <version>${changes.plugin.version}</version>
>>>> +        <reportSets>
>>>> +          <reportSet>
>>>> +            <reports>
>>>> +              <report>changes-report</report>
>>>> +            </reports>
>>>> +          </reportSet>
>>>> +        </reportSets>
>>>> +        <configuration>
>>>> +
>>>> <issueLinkTemplate>%URL%/show_bug.cgi?id=%ISSUE%</issueLinkTemplate>
>>>> +          <useJql>true</useJql>
>>>> +        </configuration>
>>>> +      </plugin>
>>>> +      <plugin>
>>>> +        <groupId>org.apache.maven.plugins</groupId>
>>>> +        <artifactId>maven-checkstyle-plugin</artifactId>
>>>> +        <version>${checkstyle.plugin.version}</version>
>>>> +        <configuration>
>>>> +
>>>> <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation>
>>>> -->
>>>> +
>>>> <configLocation>${log4jParentDir}/checkstyle.xml</configLocation>
>>>> +
>>>> <suppressionsLocation>${log4jParentDir}/checkstyle-suppressions.xml</suppressionsLocation>
>>>> +          <enableRulesSummary>false</enableRulesSummary>
>>>> +          <propertyExpansion>basedir=${basedir}</propertyExpansion>
>>>> +
>>>> <propertyExpansion>licensedir=${log4jParentDir}/checkstyle-header.txt</propertyExpansion>
>>>> +        </configuration>
>>>> +      </plugin>
>>>> +      <plugin>
>>>> +        <groupId>org.apache.maven.plugins</groupId>
>>>> +        <artifactId>maven-javadoc-plugin</artifactId>
>>>> +        <version>${javadoc.plugin.version}</version>
>>>> +        <configuration>
>>>> +          <bottom><![CDATA[<p align="center">Copyright &#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: garydgreg...@gmail.com | ggreg...@apache.org
>>>> Java Persistence with Hibernate, Second Edition
>>>> <http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>>
>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.stal...@magine.com
>>> Regeringsgatan 25  | 111 53 Stockholm, Sweden  |   www.magine.com
>>>
>>> Privileged and/or Confidential Information may be contained in this
>>> message. If you are not the addressee indicated in this message
>>> (or responsible for delivery of the message to such a person), you may
>>> not copy or deliver this message to anyone. In such case,
>>> you should destroy this message and kindly notify the sender by reply
>>> email.
>>>
>>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.stal...@magine.com
> Regeringsgatan 25  | 111 53 Stockholm, Sweden  |   www.magine.com
>
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.
>
>
>


-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.stal...@magine.com
Regeringsgatan 25  | 111 53 Stockholm, Sweden  |   www.magine.com

Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.

Reply via email to