| <?xml version="1.0"?> |
| <!-- |
| 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. |
| --> |
| |
| <document xmlns="http://maven.apache.org/XDOC/2.0" |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd"> |
| <properties> |
| <title>Log4j 2 Scala API</title> |
| <author email="mikes@apache.org">Mikael Ståldal</author> |
| </properties> |
| |
| <body> |
| <section name="Log4j 2 API"> |
| <a name="ScalaAPI"/> |
| <subsection name="Scala API"> |
| <p> |
| Log4j 2 has a companion Log4j Scala project that contains a convenient Scala wrapper for the |
| <a class="javadoc" href="../log4j-api/apidocs/org/apache/logging/log4j/Logger.html">Logger</a> |
| API. |
| </p> |
| |
| <h4>Requirements</h4> |
| <p> |
| Log4j 2 Scala API is dependent on the Log4j 2 API, Scala runtime library and reflection. |
| It currently supports Scala 2.10, 2.11 and 2.12. See <a href="../maven-artifacts.html#Scala_API">instructions</a> |
| on including this in an SBT, Maven, Ivy, or Gradle project. |
| </p> |
| |
| <h4>Example</h4> |
| <pre class="prettyprint linenums"> |
| import org.apache.logging.log4j.scala.Logging |
| import org.apache.logging.log4j.Level |
| |
| class MyClass extends BaseClass with Logging { |
| def doStuff(): Unit = { |
| logger.info("Doing stuff") |
| } |
| def doStuffWithLevel(level: Level): Unit = { |
| logger(level, "Doing stuff with arbitrary level") |
| } |
| } |
| </pre> |
| <p> |
| The output from the call to logger.info() will vary significantly depending on the configuration |
| used. See the |
| <a href="./configuration.html">Configuration</a> |
| section for more details. |
| </p> |
| <h4>Substituting Parameters</h4> |
| <p> |
| Frequently the purpose of logging is to provide information about what is happening in the system, |
| which requires including information about the objects being manipulated. In Scala, you can use |
| <a href="http://docs.scala-lang.org/overviews/core/string-interpolation.html">string interpolation |
| </a> |
| to achieve this: |
| </p> |
| <pre class="prettyprint"> |
| logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}") |
| </pre> |
| <p> |
| Since the Scala Logger is implemented with macros, the String construction and method invocations |
| will only occur when debug logging is enabled. |
| </p> |
| |
| <h4>Logger Names</h4> |
| <p> |
| Most logging implementations use a hierarchical scheme for matching logger names with logging |
| configuration. In this scheme the logger name hierarchy is represented by '.' characters in the |
| logger name, in a fashion very similar to the hierarchy used for Java/Scala package names. |
| The Logging trait will automatically name the Logger accordingly to the class it is being used in. |
| </p> |
| |
| <p>Please see the <a href="http://logging.apache.org/log4j/scala/index.html">Log4j Scala</a> project for more details.</p> |
| |
| </subsection> |
| </section> |
| </body> |
| </document> |