You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2018/04/03 21:06:23 UTC
[01/50] [abbrv] logging-log4j-scala git commit: Add minimal
Jenkinsfile
Repository: logging-log4j-scala
Updated Branches:
refs/heads/master 184045cbc -> b5ff1c751
Add minimal Jenkinsfile
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/3b425c93
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/3b425c93
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/3b425c93
Branch: refs/heads/master
Commit: 3b425c939d060f940cb4c1c9c4c9f4ee3ce070c1
Parents: e29f871
Author: Matt Sicker <bo...@gmail.com>
Authored: Wed Mar 28 16:15:19 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Wed Mar 28 16:15:19 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/3b425c93/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..7825a9f
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,50 @@
+#!groovy
+/*
+ * 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.
+ */
+
+pipeline {
+ agent {
+ label 'ubuntu'
+ }
+ tools {
+ jdk 'JDK 1.8 (latest)'
+ }
+ stages {
+ stage('Build') {
+ steps {
+ ansiColor('xterm') {
+ sh './sbt -batch "+ compile"'
+ }
+ }
+ }
+ stage('Test') {
+ steps {
+ ansiColor('xterm') {
+ sh './sbt -batch "+ test"'
+ }
+ }
+ }
+ stage('Deploy') {
+ steps {
+ ansiColor('xterm') {
+ sh './sbt -batch "+ publish"'
+ }
+ }
+ }
+ }
+}
+
[27/50] [abbrv] logging-log4j-scala git commit: Set version to
11.1-SNAPSHOT
Posted by ma...@apache.org.
Set version to 11.1-SNAPSHOT
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/a95fbe6e
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/a95fbe6e
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/a95fbe6e
Branch: refs/heads/master
Commit: a95fbe6e2bbd8f5ae351b6b0261f4a76ab0ffa8d
Parents: c888b03
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 19:52:14 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 19:52:14 2018 -0500
----------------------------------------------------------------------
version.sbt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/a95fbe6e/version.sbt
----------------------------------------------------------------------
diff --git a/version.sbt b/version.sbt
index b8bcd26..e0f281a 100644
--- a/version.sbt
+++ b/version.sbt
@@ -14,4 +14,4 @@
* See the license for the specific language governing permissions and
* limitations under the license.
*/
-version in ThisBuild := "12.0-SNAPSHOT"
+version in ThisBuild := "11.1-SNAPSHOT"
[06/50] [abbrv] logging-log4j-scala git commit: Move artifact
archival to deploy stage
Posted by ma...@apache.org.
Move artifact archival to deploy stage
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/47ba596b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/47ba596b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/47ba596b
Branch: refs/heads/master
Commit: 47ba596bc0e1631c4ee0a281c48f3f4c0321078a
Parents: 18068fb
Author: Matt Sicker <bo...@gmail.com>
Authored: Thu Mar 29 11:18:01 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Thu Mar 29 11:18:01 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/47ba596b/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index a58a304..a117fc0 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -28,7 +28,6 @@ pipeline {
steps {
ansiColor('xterm') {
sh './sbt -batch "+ compile"'
- archiveArtifacts artifacts: 'target/**/*.jar', fingerprint: true, onlyIfSuccessful: true
}
}
}
@@ -39,17 +38,16 @@ pipeline {
}
}
}
- // FIXME: LOG4J2-2291
- /*
stage('Deploy') {
when { branch 'master' }
steps {
ansiColor('xterm') {
- sh './sbt -batch "+ publish"'
+ // FIXME: LOG4J2-2291
+ //sh './sbt -batch "+ publish"'
+ archiveArtifacts artifacts: 'target/**/*.jar', fingerprint: true
}
}
}
- */
}
}
[17/50] [abbrv] logging-log4j-scala git commit: LOG4J2-2298: Add
changelog to site
Posted by ma...@apache.org.
LOG4J2-2298: Add changelog to site
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/f8d3f94b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/f8d3f94b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/f8d3f94b
Branch: refs/heads/master
Commit: f8d3f94b89f9f64c729f6b818677ccb4a0cfe9c3
Parents: 5be05b5
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 16:46:08 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 16:46:08 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/changes.adoc | 42 +++++++++++++++++++++++
src/asciidoctor/index.adoc | 57 ++-----------------------------
src/asciidoctor/usage.adoc | 70 +++++++++++++++++++++++++++++++++++++++
src/changes/changes.xml | 60 ---------------------------------
4 files changed, 115 insertions(+), 114 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/f8d3f94b/src/asciidoctor/changes.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/changes.adoc b/src/asciidoctor/changes.adoc
new file mode 100644
index 0000000..890263a
--- /dev/null
+++ b/src/asciidoctor/changes.adoc
@@ -0,0 +1,42 @@
+////
+ 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.
+////
+== ChangeLog
+
+=== Version 11.1
+
+[vertical]
+New Features::
+[horizontal]
+LOG4J2-2298::: Add changelog to site.
+LOG4J2-2293::: Add required license files to SBT output artifacts.
+LOG4J2-2296::: Add sbt-site plugin and website configuration.
+LOG4J2-2291::: Add Jenkins pipeline for SBT build.
+
+[vertical]
+Bug Fixes:: None.
+
+[vertical]
+Changes::
+[horizontal]
+LOG4J2-2290::: Update Log4j from 2.9.1 to 2.11.0.
+LOG4J2-1995::: Update log4j-api-scala_2.11 from Scala 2.11.8 to 2.11.11.
+LOG4J2-1996::: Update log4j-api-scala_2.12 from Scala 2.12.1 to 2.12.3.
+LOG4J2-2115::: Update Log4j dependency from 2.8.1 to 2.9.1.
+LOG4J2-2116::: Update log4j-api-scala_2.12 from Scala 2.12.3 to 2.12.4.
+
+[vertical]
+Removed:: None.
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/f8d3f94b/src/asciidoctor/index.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/index.adoc b/src/asciidoctor/index.adoc
index b9595af..33e0ceb 100644
--- a/src/asciidoctor/index.adoc
+++ b/src/asciidoctor/index.adoc
@@ -15,72 +15,21 @@
limitations under the License.
////
= Apache Log4j Scala API
+:toc: left
Log4j Scala API is a Scala logging facade based on Log4j 2.
Support for Scala versions 2.10, 2.11, and 2.12 are provided, and experimental support for pre-release versions of 2.13 is also provided.
Log4j Scala API uses Log4j 2.x as its logging backend by default, but this can also be replaced with compatible libraries (e.g., Logback).
While this library is not required to use Log4j API in Scala, it does provide idiomatic Scala APIs which are friendlier to use in Scala programs than the Java APIs.
-== Usage
+include::usage.adoc[]
-Log4j Scala API requires Log4j API. An example SBT dependency setup:
-
-.build.sbt
-[source,scala]
-----
-libraryDependencies ++= Seq(
- "org.apache.logging.log4j" %% "log4j-api-scala" % "11.0",
- "org.apache.logging.log4j" % "log4j-api" % "2.11.0",
- "org.apache.logging.log4j" % "log4j-core" % "2.11.0" % Runtime)
-----
-
-Using the Scala API is as simple as mixing in the `Logging` trait to your class. Example:
-
-[source,scala]
-----
-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")
- }
- def doStuffWithUser(user: User): Unit = {
- logger.info(s"Doing stuff with ${user.getName}.")
- }
-}
-----
-
-== Configuration
-
-Log4j Scala API uses https://logging.apache.org/log4j/2.x/manual/configuration.html[Log4j configuration] by default.
-This supports XML, properties files, and Java-based builders, as well as JSON and YAML with additional dependencies.
-
-== Substituting Parameters
-
-Unlike in Java, Scala provides native functionality for string interpolation https://docs.scala-lang.org/overviews/core/string-interpolation.html[beginning in Scala 2.10].
-As all logger calls are implemented as macros, using string interpolation directly does not require additional if checks.
-For example:
-
-[source,scala]
-----
-logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
-----
-
-== Logger Names
-
-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.
+include::changes.adoc[]
////
TODO:
* Apache logo
* Downloads page
-* Changelog page
* License report
* Other reports?
* ScalaDocs links
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/f8d3f94b/src/asciidoctor/usage.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/usage.adoc b/src/asciidoctor/usage.adoc
new file mode 100644
index 0000000..10fa6b9
--- /dev/null
+++ b/src/asciidoctor/usage.adoc
@@ -0,0 +1,70 @@
+////
+ 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.
+////
+== Usage
+
+Log4j Scala API requires Log4j API. An example SBT dependency setup:
+
+.build.sbt
+[source,scala]
+----
+libraryDependencies ++= Seq(
+ "org.apache.logging.log4j" %% "log4j-api-scala" % "11.0",
+ "org.apache.logging.log4j" % "log4j-api" % "2.11.0",
+ "org.apache.logging.log4j" % "log4j-core" % "2.11.0" % Runtime)
+----
+
+Using the Scala API is as simple as mixing in the `Logging` trait to your class. Example:
+
+[source,scala]
+----
+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")
+ }
+ def doStuffWithUser(user: User): Unit = {
+ logger.info(s"Doing stuff with ${user.getName}.")
+ }
+}
+----
+
+== Configuration
+
+Log4j Scala API uses https://logging.apache.org/log4j/2.x/manual/configuration.html[Log4j configuration] by default.
+This supports XML, properties files, and Java-based builders, as well as JSON and YAML with additional dependencies.
+
+== Substituting Parameters
+
+Unlike in Java, Scala provides native functionality for string interpolation https://docs.scala-lang.org/overviews/core/string-interpolation.html[beginning in Scala 2.10].
+As all logger calls are implemented as macros, using string interpolation directly does not require additional if checks.
+For example:
+
+[source,scala]
+----
+logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
+----
+
+== Logger Names
+
+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.
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/f8d3f94b/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
deleted file mode 100644
index f3863eb..0000000
--- a/src/changes/changes.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set sw=2: -->
-<!--
- 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/changes/1.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
- <properties>
- <title>Changes</title>
- </properties>
- <body>
- <!-- NOTE: the text node in an action element is interpreted as Markdown in the release notes! -->
- <!-- The "type" attribute can have the following values:
- - "add" - New Feature
- - "fix" - Fixed Bug
- - "update" - Change
- - "remove" - Removed
- -->
- <release version="11.1" date="2018-MM-DD" description="GA Release 11.1">
- <action issue="LOG4J2-2293" dev="mattsicker" type="add">
- Add required license files to SBT output artifacts.
- </action>
- <action issue="LOG4J2-2296" dev="mattsicker" type="add">
- Add sbt-site plugin and website configuration.
- </action>
- <action issue="LOG4J2-2291" dev="mattsicker" type="add">
- Add Jenkins pipeline for SBT build.
- </action>
- <action issue="LOG4J2-2290" dev="mattsicker" type="update">
- Update Log4j from 2.9.1 to 2.11.0.
- </action>
- <action issue="LOG4J2-1995" dev="ggregory" type="update">
- Update log4j-api-scala_2.11 from Scala 2.11.8 to 2.11.11.
- </action>
- <action issue="LOG4J2-1996" dev="ggregory" type="update">
- Update log4j-api-scala_2.12 from Scala 2.12.1 to 2.12.3.
- </action>
- <action issue="LOG4J2-2115" dev="ggregory" type="update">
- Update Log4j dependency from 2.8.1 to 2.9.1.
- </action>
- <action issue="LOG4J2-2116" dev="ggregory" type="update">
- Update log4j-api-scala_2.12 from Scala 2.12.3 to 2.12.4.
- </action>
- </release>
- </body>
-</document>
[34/50] [abbrv] logging-log4j-scala git commit: Add links to docs
Posted by ma...@apache.org.
Add links to docs
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/cead3895
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/cead3895
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/cead3895
Branch: refs/heads/master
Commit: cead389503f2314d7c047a62566c3d1eaa798950
Parents: 7e2426b
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 20:25:54 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 20:28:09 2018 -0500
----------------------------------------------------------------------
BUILDING.md | 14 +-------------
CONTRIBUTING.md | 53 +---------------------------------------------------
README.md | 2 +-
3 files changed, 3 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/cead3895/BUILDING.md
----------------------------------------------------------------------
diff --git a/BUILDING.md b/BUILDING.md
index 7497179..1fea4bb 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -15,17 +15,5 @@
limitations under the License.
-->
# Building Log4j 2 Scala API
-
-To build Log4j 2 Scala API, you need a JDK implementation version 1.8 or greater and Apache Maven 3.x.
-To perform the license release audit, a.k.a. "RAT check", run.
-
- mvn apache-rat:check
-
-To install the jars in your local Maven repository, from a command line, run:
-
- mvn clean install
-
-Next, to build the site:
-
- mvn site
+Moved to [site docs](./src/asciidoctor/build.adoc).
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/cead3895/CONTRIBUTING.md
----------------------------------------------------------------------
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 526d871..93299c1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -14,57 +14,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<!--
-This looks like it was generated, but it was actually modified from the
-CONTRIBUTING.md file from Apache Commons Lang.
--->
# Contributing to Apache Log4j 2
-You have found a bug or you have an idea for a cool new feature? Contributing code is a great way to give something back to
-the open source community. Before you dig right into the code there are a few guidelines that we need contributors to
-follow so that we can have a chance of keeping on top of things.
-
-## Getting Started
-
-+ Make sure you have a [JIRA account](https://issues.apache.org/jira/).
-+ Make sure you have a [GitHub account](https://github.com/signup/free).
-+ If you're planning to implement a new feature it makes sense to discuss your changes on the [dev list](https://logging.apache.org/log4j/2.x/mail-lists.html) first. This way you can make sure you're not wasting your time on something that isn't considered to be in Apache Log4j's scope.
-+ Submit a ticket for your issue, assuming one does not already exist.
- + Clearly describe the issue including steps to reproduce when it is a bug.
- + Make sure you fill in the earliest version that you know has the issue.
-+ Fork the repository on GitHub.
-
-## Making Changes
-
-+ Create a topic branch from where you want to base your work (this is usually the master branch).
-+ Make commits of logical units.
-+ Respect the original code style:
- + Only use spaces for indentation.
- + Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
- + Check for unnecessary whitespace with git diff --check before committing.
-+ Make sure your commit messages are in the proper format. Your commit message should contain the key of the JIRA issue.
-+ Make sure you have added the necessary tests for your changes.
-+ Run all the tests with `mvn clean verify` to assure nothing else was accidentally broken.
-
-## Making Trivial Changes
-
-For changes of a trivial nature to comments and documentation, it is not always necessary to create a new ticket in JIRA.
-In this case, it is appropriate to start the first line of a commit with '(doc)' instead of a ticket number.
-
-## Submitting Changes
-
-+ Sign the [Contributor License Agreement][cla] if you haven't already.
-+ Push your changes to a topic branch in your fork of the repository.
-+ Submit a pull request to the repository in the apache organization.
-+ Update your JIRA ticket and include a link to the pull request in the ticket.
-
-## Additional Resources
-
-+ [Project Guidelines](https://logging.apache.org/log4j/2.x/guidelines.html)
-+ [Code Style Guide](https://logging.apache.org/log4j/2.x/javastyle.html)
-+ [Apache Log4j 2 JIRA project page](https://issues.apache.org/jira/browse/LOG4J2)
-+ [Contributor License Agreement][cla]
-+ [General GitHub documentation](https://help.github.com/)
-+ [GitHub pull request documentation](https://help.github.com/send-pull-requests/)
-
-[cla]:https://www.apache.org/licenses/#clas
+Moved to [site docs](./src/asciidoctor/contributing.adoc).
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/cead3895/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 7206b3c..f2c2918 100644
--- a/README.md
+++ b/README.md
@@ -86,4 +86,4 @@ mvn install
## Contributing
-We love contributions! Take a look at [our contributing page](https://github.com/apache/logging-log4j-scala/blob/master/CONTRIBUTING.md).
+We love contributions! Take a look at [our contributing page](https://github.com/apache/logging-log4j-scala/blob/master/src/asciidoctor/contributing.adoc).
[28/50] [abbrv] logging-log4j-scala git commit: Add build page
Posted by ma...@apache.org.
Add build page
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/a42494ae
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/a42494ae
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/a42494ae
Branch: refs/heads/master
Commit: a42494ae47b69c6d12aa4258704c35fcb3174edb
Parents: a95fbe6
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 19:52:56 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 19:52:56 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/build.adoc | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/a42494ae/src/asciidoctor/build.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/build.adoc b/src/asciidoctor/build.adoc
new file mode 100644
index 0000000..955501c
--- /dev/null
+++ b/src/asciidoctor/build.adoc
@@ -0,0 +1,32 @@
+////
+ 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.
+////
+== Building From Source
+
+NOTE: The following information is for developers who wish to modify Log4j Scala API or contribute.
+If your goal is to add logging to your application, then you can use the link:build.html[pre-built binaries] instead.
+
+.Auditing
+[source,bash]
+----
+./sbt auditCheck
+----
+
+.Building
+[source,bash]
+----
+./sbt "+ package"
+----
[23/50] [abbrv] logging-log4j-scala git commit: Fix typo
Posted by ma...@apache.org.
Fix typo
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/9c4d5484
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/9c4d5484
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/9c4d5484
Branch: refs/heads/master
Commit: 9c4d5484cf2dd828ab3362c6bb63ed9e97c637e8
Parents: 421c39c
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 19:48:55 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 19:48:55 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/9c4d5484/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index 1af227b..90b3893 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -59,7 +59,7 @@ pipeline {
}
post {
failure {
- emailext body: "See <${env.BUILD_URL}>", replyTo: 'dev@logging.apache.org', subject: "[Scala] Jenkins build failure (#${env.BUILD_NUMBER})", 'notifications@logging.apache.org'
+ emailext body: "See <${env.BUILD_URL}>", replyTo: 'dev@logging.apache.org', subject: "[Scala] Jenkins build failure (#${env.BUILD_NUMBER})", to: 'notifications@logging.apache.org'
}
}
}
[02/50] [abbrv] logging-log4j-scala git commit: Reorganize api module
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
----------------------------------------------------------------------
diff --git a/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala b/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
new file mode 100644
index 0000000..3b54db1
--- /dev/null
+++ b/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
@@ -0,0 +1,425 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala
+
+import org.apache.logging.log4j.message.{EntryMessage, Message}
+import org.apache.logging.log4j.spi.AbstractLogger
+import org.apache.logging.log4j.{Level, Marker}
+
+import scala.language.experimental.macros
+import scala.reflect.macros.blackbox
+
+/**
+ * Inspired from [[https://github.com/typesafehub/scalalogging ScalaLogging]].
+ */
+private object LoggerMacro {
+
+ type LoggerContext = blackbox.Context { type PrefixType = Logger }
+
+
+ def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
+ logMarkerMsg(c)(c.universe.reify(Level.FATAL), marker, message)
+
+ def fatalMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.FATAL), marker, message)
+
+ def fatalMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(c)(c.universe.reify(Level.FATAL), 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 fatalMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause)
+
+ def fatalMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 fatalCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.FATAL), message)
+
+ def fatalObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 fatalCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
+
+ def fatalObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 errorMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.ERROR), marker, message)
+
+ def errorMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 errorMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
+
+ def errorMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 errorCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.ERROR), message)
+
+ def errorObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 errorCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
+
+ def errorObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 warnMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.WARN), marker, message)
+
+ def warnMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 warnMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
+
+ def warnMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 warnCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.WARN), message)
+
+ def warnObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 warnCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.WARN), message, cause)
+
+ def warnObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 infoMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.INFO), marker, message)
+
+ def infoMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 infoMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
+
+ def infoMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 infoCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.INFO), message)
+
+ def infoObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 infoCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.INFO), message, cause)
+
+ def infoObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 debugMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.DEBUG), marker, message)
+
+ def debugMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 debugMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
+
+ def debugMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 debugCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.DEBUG), message)
+
+ def debugObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 debugCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
+
+ def debugObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 traceMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.TRACE), marker, message)
+
+ def traceMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 traceMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
+
+ def traceMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 traceCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.TRACE), message)
+
+ def traceObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 traceCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
+
+ def traceObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 logMarkerCseq(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ 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 logMarkerObject(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ 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 logMarkerCseqThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence], 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 logMarkerObjectThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef], 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 logCseq(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence]) =
+ c.universe.reify(
+ if (c.prefix.splice.delegate.isEnabled(level.splice)) {
+ c.prefix.splice.logMessage(level.splice, null, message.splice, null)
+ }
+ )
+
+ def logObject(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef]) =
+ 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 logCseqThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence], 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 logObjectThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef], 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 traceEntry(c: LoggerContext)(): c.Expr[EntryMessage] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceEntry()
+ )
+
+ def traceEntryParams(c: LoggerContext)(params: c.Expr[AnyRef]*): c.Expr[EntryMessage] = {
+ import c.universe._
+ val isEnabled = Apply(
+ Select(Select(c.prefix.tree, TermName("delegate")), TermName("isEnabled")),
+ List(
+ reify(Level.TRACE).tree,
+ reify(AbstractLogger.ENTRY_MARKER).tree,
+ reify(null: AnyRef).tree,
+ reify(null).tree
+ )
+ )
+
+ val log = Apply(
+ Select(Select(c.prefix.tree, TermName("delegate")), TermName("traceEntry")),
+ reify(null: String).tree :: (params map (_.tree)).toList
+ )
+ c.Expr[EntryMessage](If(isEnabled, log, reify(null).tree))
+ }
+
+
+ def traceEntryMessage(c: LoggerContext)(message: c.Expr[Message]): c.Expr[EntryMessage] =
+ c.universe.reify(
+ if (c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null: AnyRef, null)) {
+ c.prefix.splice.delegate.traceEntry(message.splice) // TODO should not do ifEnabled check
+ } else {
+ null
+ }
+ )
+
+ def traceExit(c: LoggerContext)(): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit()
+ )
+
+ def traceExitResult[R: c.WeakTypeTag](c: LoggerContext)(result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(result.splice)
+ )
+
+ def traceExitEntryMessage(c: LoggerContext)(entryMessage: c.Expr[EntryMessage]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(entryMessage.splice)
+ )
+
+ def traceExitEntryMessageResult[R: c.WeakTypeTag](c: LoggerContext)(entryMessage: c.Expr[EntryMessage], result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(entryMessage.splice, result.splice)
+ )
+
+ def traceExitMessageResult[R: c.WeakTypeTag](c: LoggerContext)(message: c.Expr[Message], result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ {
+ if (message.splice != null && c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, message.splice, null)) {
+ c.prefix.splice.delegate.traceExit(message.splice, result.splice) // TODO should not do ifEnabled check
+ }
+ result.splice
+ }
+ )
+
+ def throwing[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(t: c.Expr[T]): c.Expr[T] =
+ c.universe.reify(
+ c.prefix.splice.delegate.throwing(t.splice)
+ )
+
+ def throwingLevel[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(level: c.Expr[Level], t: c.Expr[T]): c.Expr[T] =
+ c.universe.reify(
+ c.prefix.splice.delegate.throwing(level.splice, t.splice)
+ )
+
+ def catching(c: LoggerContext)(t: c.Expr[Throwable]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.catching(t.splice)
+ )
+
+ def catchingLevel(c: LoggerContext)(level: c.Expr[Level], t: c.Expr[Throwable]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.catching(level.splice, t.splice)
+ )
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/src/main/scala/org/apache/logging/log4j/scala/Logging.scala
----------------------------------------------------------------------
diff --git a/src/main/scala/org/apache/logging/log4j/scala/Logging.scala b/src/main/scala/org/apache/logging/log4j/scala/Logging.scala
new file mode 100644
index 0000000..b017de7
--- /dev/null
+++ b/src/main/scala/org/apache/logging/log4j/scala/Logging.scala
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala
+
+/**
+ * Mix in this trait into classes from which you want to log,
+ * give you a `logger` value with a [[Logger]] named according to the class.
+ */
+trait Logging {
+
+ /**
+ * A [[Logger]] named according to the class.
+ */
+ protected val logger: Logger = Logger(getClass)
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/src/main/scala/org/apache/logging/log4j/scala/LoggingContext.scala
----------------------------------------------------------------------
diff --git a/src/main/scala/org/apache/logging/log4j/scala/LoggingContext.scala b/src/main/scala/org/apache/logging/log4j/scala/LoggingContext.scala
new file mode 100644
index 0000000..79efecc
--- /dev/null
+++ b/src/main/scala/org/apache/logging/log4j/scala/LoggingContext.scala
@@ -0,0 +1,84 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala
+
+import org.apache.logging.log4j.ThreadContext
+
+import scala.collection.JavaConverters._
+import scala.collection.{immutable, mutable}
+
+/** Manages the context data (context map, MDC) that is added to log events.
+ *
+ * A wrapper around `org.apache.logging.log4j.ThreadContext`.
+ */
+object LoggingContext extends mutable.Map[String, String] {
+
+ override def +=(kv: (String, String)): LoggingContext.this.type = {
+ ThreadContext.put(kv._1, kv._2)
+ this
+ }
+
+ override def +=(elem1: (String, String), elem2: (String, String), elems: (String, String)*): LoggingContext.this.type = {
+ val builder = immutable.Map.newBuilder[String,String]
+ builder += elem1
+ builder += elem2
+ builder ++= elems
+ ThreadContext.putAll(builder.result.asJava)
+ this
+ }
+
+ override def ++=(xs: TraversableOnce[(String, String)]): LoggingContext.this.type = {
+ ThreadContext.putAll(xs.toMap.asJava)
+ this
+ }
+
+ override def -=(key: String): LoggingContext.this.type = {
+ ThreadContext.remove(key)
+ this
+ }
+
+ override def -=(elem1: String, elem2: String, elems: String*): LoggingContext.this.type = {
+ val builder = immutable.Seq.newBuilder[String]
+ builder += elem1
+ builder += elem2
+ builder ++= elems
+ ThreadContext.removeAll(builder.result.asJava)
+ this
+ }
+
+ override def --=(xs: TraversableOnce[String]): LoggingContext.this.type = {
+ ThreadContext.removeAll(xs.toSeq.asJava)
+ this
+ }
+
+ override def clear(): Unit = {
+ ThreadContext.clearMap()
+ }
+
+ override def contains(key: String): Boolean = ThreadContext.containsKey(key)
+
+ override def get(key: String): Option[String] = Option(ThreadContext.get(key))
+
+ override def iterator: Iterator[(String, String)] = ThreadContext.getImmutableContext.asScala.iterator
+
+ override def foreach[U](f: ((String, String)) => U): Unit = ThreadContext.getImmutableContext.asScala.foreach(f)
+
+ override def size: Int = ThreadContext.getImmutableContext.size()
+
+ override def isEmpty: Boolean = ThreadContext.isEmpty
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala
----------------------------------------------------------------------
diff --git a/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala b/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala
new file mode 100644
index 0000000..bd12742
--- /dev/null
+++ b/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala
@@ -0,0 +1,552 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala
+
+import org.apache.logging.log4j.message.{DefaultFlowMessageFactory, Message, ParameterizedMessage, ParameterizedMessageFactory}
+import org.apache.logging.log4j.spi.{AbstractLogger, ExtendedLogger}
+import org.apache.logging.log4j.{Level, Marker, MarkerManager}
+import org.junit.runner.RunWith
+import org.mockito.Matchers.{any, anyString, eq => eqv}
+import org.mockito.Mockito._
+import org.scalatest.junit.JUnitRunner
+import org.scalatest.mockito.MockitoSugar
+import org.scalatest.{FunSuite, Matchers}
+
+import scala.language.reflectiveCalls // needed for Mockito mocking
+
+case class Custom(i: Int)
+
+trait Manager {
+ def fetchValue(): Int
+}
+
+@RunWith(classOf[JUnitRunner])
+class LoggerTest extends FunSuite with Matchers with MockitoSugar {
+
+ val msg = new ParameterizedMessage("msg {}", 17)
+ val entryMsg = new DefaultFlowMessageFactory().newEntryMessage(msg)
+ val cseqMsg: CharSequence = new StringBuilder().append("cseq msg")
+ val objectMsg = Custom(17)
+ val cause = new RuntimeException("cause")
+ val marker = MarkerManager.getMarker("marker")
+ val result = "foo"
+
+ def fixture =
+ new {
+ val mockLogger = {
+ val mockLogger = mock[ExtendedLogger]
+ when(mockLogger.getMessageFactory).thenReturn(new ParameterizedMessageFactory)
+ mockLogger
+ }
+ val manager = {
+ val mockManager = mock[Manager]
+ when(mockManager.fetchValue()).thenReturn(4711)
+ mockManager
+ }
+ }
+
+ test("fatal enabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.FATAL)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.fatal(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.FATAL), eqv(null), any[Message], eqv(null))
+ verify(f.manager).fetchValue()
+ }
+
+ test("fatal disabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.FATAL)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.fatal(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("error enabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.ERROR)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.error(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.ERROR), eqv(null), any[Message], eqv(null))
+ verify(f.manager).fetchValue()
+ }
+
+ test("error disabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.ERROR)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.error(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("warn enabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.WARN)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.warn(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.WARN), eqv(null), any[Message], eqv(null))
+ verify(f.manager).fetchValue()
+ }
+
+ test("warn disabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.WARN)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.warn(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("info enabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.info(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(null))
+ verify(f.manager).fetchValue()
+ }
+
+ test("info disabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.info(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("debug enabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.DEBUG)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.debug(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.DEBUG), eqv(null), any[Message], eqv(null))
+ verify(f.manager).fetchValue()
+ }
+
+ test("debug disabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.DEBUG)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.debug(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("trace enabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.trace(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.TRACE), eqv(null), any[Message], eqv(null))
+ verify(f.manager).fetchValue()
+ }
+
+ test("trace disabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.trace(s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+
+ test("log enabled with Message message and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, msg)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), eqv(msg), eqv(null))
+ }
+
+ test("log disabled with Message message and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, msg)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with String message and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(null))
+ verify(f.manager).fetchValue()
+ }
+
+ test("log disabled with String message and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("log enabled with CharSequence message and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, cseqMsg)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(null))
+ }
+
+ test("log disabled with CharSequence message and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, cseqMsg)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with Object message and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, objectMsg)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(null))
+ }
+
+ test("log disabled with Object message and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, objectMsg)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with Message message and cause and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, msg, cause)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), eqv(msg), eqv(cause))
+ }
+
+ test("log disabled with Message message and cause and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, msg, cause)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with String message and cause and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, s"string msg with value: ${f.manager.fetchValue()}", cause)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(cause))
+ verify(f.manager).fetchValue()
+ }
+
+ test("log disabled with String message and cause and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, s"string msg with value: ${f.manager.fetchValue()}", cause)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("log enabled with CharSequence message and cause and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, cseqMsg, cause)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(cause))
+ }
+
+ test("log disabled with CharSequence message and cause and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, cseqMsg, cause)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with Object message and cause and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, objectMsg, cause)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(cause))
+ }
+
+ test("log disabled with Object message and cause and Marker") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, marker, objectMsg, cause)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with Message message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, msg)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), eqv(msg), eqv(null))
+ }
+
+ test("log disabled with Message message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, msg)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(null))
+ verify(f.manager).fetchValue()
+ }
+
+ test("log disabled with String message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, s"string msg with value: ${f.manager.fetchValue()}")
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("log enabled with CharSequence message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, cseqMsg)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(null))
+ }
+
+ test("log disabled with CharSequence message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, cseqMsg)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with Object message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, objectMsg)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(null))
+ }
+
+ test("log disabled with Object message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, objectMsg)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with Message message and cause") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, msg, cause)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), eqv(msg), eqv(cause))
+ }
+
+ test("log disabled with Message message and cause") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, msg, cause)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with String message and cause") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, s"string msg with value: ${f.manager.fetchValue()}", cause)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(cause))
+ verify(f.manager).fetchValue()
+ }
+
+ test("log disabled with String message and cause") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, s"string msg with value: ${f.manager.fetchValue()}", cause)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ verify(f.manager, never).fetchValue()
+ }
+
+ test("log enabled with CharSequence message and cause") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, cseqMsg, cause)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(cause))
+ }
+
+ test("log disabled with CharSequence message and cause") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, cseqMsg, cause)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+ test("log enabled with Object message and cause") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, objectMsg, cause)
+ verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(cause))
+ }
+
+ test("log disabled with Object message and cause") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger(Level.INFO, objectMsg, cause)
+ verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
+ }
+
+
+ test("traceEntry") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.traceEntry()
+ verify(f.mockLogger).traceEntry()
+ }
+
+ test("traceEntry enabled with params") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.traceEntry("foo", "bar")
+ verify(f.mockLogger).traceEntry(null: String, "foo", "bar")
+ }
+
+ test("traceEntry disabled with params") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.traceEntry("foo", "bar")
+ verify(f.mockLogger, never).traceEntry(anyString(), anyString(), anyString())
+ }
+
+ test("traceEntry enabled with message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.traceEntry(msg)
+ verify(f.mockLogger).traceEntry(eqv(msg))
+ }
+
+ test("traceEntry disabled with message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.traceEntry(msg)
+ verify(f.mockLogger, never).traceEntry(any[Message])
+ }
+
+ test("traceExit") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.traceExit()
+ verify(f.mockLogger).traceExit()
+ }
+
+ test("traceExit with result") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.traceExit(result)
+ verify(f.mockLogger).traceExit(result)
+ }
+
+ test("traceExit with entrymessage") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.traceExit(entryMsg)
+ verify(f.mockLogger).traceExit(entryMsg)
+ }
+
+ test("traceExit with entrymessage and result") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.traceExit(entryMsg, result)
+ verify(f.mockLogger).traceExit(entryMsg, result)
+ }
+
+ test("traceExit enabled with message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
+ val logger = Logger(f.mockLogger)
+ logger.traceExit(msg, result)
+ verify(f.mockLogger).traceExit(eqv(msg), eqv(result))
+ }
+
+ test("traceExit disabled with message") {
+ val f = fixture
+ when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(false)
+ val logger = Logger(f.mockLogger)
+ logger.traceExit(msg, result)
+ verify(f.mockLogger, never).traceExit(any[Message], any[AnyRef])
+ }
+
+ test("throwing") {
+ val f = fixture
+ val logger = Logger(f.mockLogger)
+ logger.throwing(cause)
+ verify(f.mockLogger).throwing(eqv(cause))
+ }
+
+ test("throwing with level") {
+ val f = fixture
+ val logger = Logger(f.mockLogger)
+ logger.throwing(Level.INFO, cause)
+ verify(f.mockLogger).throwing(eqv(Level.INFO), eqv(cause))
+ }
+
+ test("catching") {
+ val f = fixture
+ val logger = Logger(f.mockLogger)
+ logger.catching(cause)
+ verify(f.mockLogger).catching(eqv(cause))
+ }
+
+ test("catching with level") {
+ val f = fixture
+ val logger = Logger(f.mockLogger)
+ logger.catching(Level.INFO, cause)
+ verify(f.mockLogger).catching(eqv(Level.INFO), eqv(cause))
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/src/test/scala/org/apache/logging/log4j/scala/LoggingContextTest.scala
----------------------------------------------------------------------
diff --git a/src/test/scala/org/apache/logging/log4j/scala/LoggingContextTest.scala b/src/test/scala/org/apache/logging/log4j/scala/LoggingContextTest.scala
new file mode 100644
index 0000000..80ca940
--- /dev/null
+++ b/src/test/scala/org/apache/logging/log4j/scala/LoggingContextTest.scala
@@ -0,0 +1,115 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala
+
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+import org.scalatest.{FunSuite, Matchers}
+
+import scala.collection.mutable
+
+@RunWith(classOf[JUnitRunner])
+class LoggingContextTest extends FunSuite with Matchers {
+
+ test("put single, contains, get") {
+ LoggingContext += "key" -> "value"
+
+ LoggingContext.contains("key") shouldBe true
+ LoggingContext.get("key") shouldBe Some("value")
+ LoggingContext.contains("bogus") shouldBe false
+ LoggingContext.get("bogus") shouldBe None
+ }
+
+ test("put multiple 1") {
+ LoggingContext += ("key1" -> "value1", "key2" -> "value2")
+
+ LoggingContext.get("key1") shouldBe Some("value1")
+ LoggingContext.get("key2") shouldBe Some("value2")
+ }
+
+ test("put multiple 2") {
+ LoggingContext ++= Seq("key1" -> "value1", "key2" -> "value2")
+
+ LoggingContext.get("key1") shouldBe Some("value1")
+ LoggingContext.get("key2") shouldBe Some("value2")
+ }
+
+ test("remove single") {
+ LoggingContext += ("key1" -> "value1")
+ LoggingContext += ("key2" -> "value2")
+ LoggingContext += ("key3" -> "value3")
+
+ LoggingContext -= "key1"
+
+ LoggingContext.get("key1") shouldBe None
+ LoggingContext.get("key2") shouldBe Some("value2")
+ LoggingContext.get("key3") shouldBe Some("value3")
+ }
+
+ test("remove multiple 1") {
+ LoggingContext += ("key1" -> "value1")
+ LoggingContext += ("key2" -> "value2")
+ LoggingContext += ("key3" -> "value3")
+
+ LoggingContext -= ("key1", "key2")
+
+ LoggingContext.get("key1") shouldBe None
+ LoggingContext.get("key2") shouldBe None
+ LoggingContext.get("key3") shouldBe Some("value3")
+ }
+
+ test("remove multiple 2") {
+ LoggingContext += ("key1" -> "value1")
+ LoggingContext += ("key2" -> "value2")
+ LoggingContext += ("key3" -> "value3")
+
+ LoggingContext --= Seq("key1", "key2")
+
+ LoggingContext.get("key1") shouldBe None
+ LoggingContext.get("key2") shouldBe None
+ LoggingContext.get("key3") shouldBe Some("value3")
+ }
+
+ test("clear, size, isEmpty") {
+ LoggingContext += ("key" -> "value")
+
+ LoggingContext.clear()
+
+ LoggingContext.contains("key") shouldBe false
+ LoggingContext.size shouldBe 0
+ LoggingContext.isEmpty shouldBe true
+ }
+
+ test("iterator") {
+ LoggingContext += ("key1" -> "value1")
+ LoggingContext += ("key2" -> "value2")
+
+ LoggingContext.iterator.toSet shouldBe Set("key1" -> "value1", "key2" -> "value2")
+ }
+
+ test("foreach") {
+ LoggingContext += ("key1" -> "value1")
+ LoggingContext += ("key2" -> "value2")
+
+ val result = mutable.Set.empty[(String, String)]
+
+ LoggingContext.foreach { result += _ }
+
+ result shouldBe Set("key1" -> "value1", "key2" -> "value2")
+ }
+
+}
[48/50] [abbrv] logging-log4j-scala git commit: LOG4J2-2303: Add
release distribution script
Posted by ma...@apache.org.
LOG4J2-2303: Add release distribution script
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/ddc513c5
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/ddc513c5
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/ddc513c5
Branch: refs/heads/master
Commit: ddc513c58cd302353c00898bace1a5d4f953d2e4
Parents: be2e32b
Author: Matt Sicker <bo...@gmail.com>
Authored: Tue Apr 3 16:00:11 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Tue Apr 3 16:00:31 2018 -0500
----------------------------------------------------------------------
build.sbt | 3 +-
create-distributions.sh | 62 +++++++++++++++++++++++++
project/Distributions.scala | 96 +++++++++++++++++++++++++++++++++++++++
src/asciidoctor/changes.adoc | 1 +
4 files changed, 161 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/ddc513c5/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 9398b25..722267f 100644
--- a/build.sbt
+++ b/build.sbt
@@ -82,7 +82,7 @@ lazy val packagingSettings = Seq(
),
unmanagedSources in Compile := {
val Some((_, minor)) = CrossVersion.partialVersion(scalaVersion.value)
- val extras = if (minor > 10) ((baseDirectory.value / "src" / "main" / "scala-2.11+") ** "*.scala").get else Nil
+ val extras = if (minor > 10) ((sourceDirectory.value / "main" / "scala-2.11+") ** "*.scala").get else Nil
(unmanagedSources in Compile).value ++ extras
}
)
@@ -126,6 +126,7 @@ lazy val root = (project in file("."))
.enablePlugins(SiteScaladocPlugin)
.enablePlugins(SbtOsgi)
.settings(bundleSettings: _*)
+ .enablePlugins(Distributions)
lazy val nopublish = Seq(
publish := {},
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/ddc513c5/create-distributions.sh
----------------------------------------------------------------------
diff --git a/create-distributions.sh b/create-distributions.sh
new file mode 100755
index 0000000..9750ea6
--- /dev/null
+++ b/create-distributions.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+# 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.
+
+function sign_file() {
+ release_key=${GPG_KEYID:-748F15B2CF9BA8F024155E6ED7C92B70FA1C814D}
+ gpg --detach-sign --armor --user ${release_key} "$1"
+}
+
+function create_sources_from_tag() {
+ out_format=$1
+ release_version=$2
+ git archive --prefix=apache-log4j-api-scala-${release_version}-src/ -o target/apache-log4j-api-scala-${release_version}-src.${out_format} ${release_version}
+ sign_file target/apache-log4j-api-scala-${release_version}-src.${out_format}
+}
+
+function create_all_sources_from_tag() {
+ create_sources_from_tag zip $1
+ create_sources_from_tag tar.gz $1
+}
+
+function create_sources() {
+ out_format=$1
+ git archive --prefix=apache-log4j-api-scala-SNAPSHOT-src/ -o target/apache-log4j-api-scala-SNAPSHOT-src.${out_format} HEAD
+}
+
+function create_all_sources() {
+ create_sources zip
+ create_sources tar.gz
+}
+
+function create_all_binaries() {
+ ./sbt -batch "; + package; packageDistributions"
+}
+
+function create_all() {
+ create_all_sources
+ create_all_binaries
+}
+
+function main() {
+ case $1 in
+ SNAPSHOT) create_all;;
+ *) create_all_sources_from_tag $1; create_all_binaries;;
+ esac
+}
+
+tag=${1:-SNAPSHOT}
+
+main ${tag}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/ddc513c5/project/Distributions.scala
----------------------------------------------------------------------
diff --git a/project/Distributions.scala b/project/Distributions.scala
new file mode 100644
index 0000000..25b4b5a
--- /dev/null
+++ b/project/Distributions.scala
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ */
+import java.io.FileOutputStream
+import java.util.zip.GZIPOutputStream
+
+import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream
+import sbt.{Def, _}
+import sbt.plugins.JvmPlugin
+
+object Distributions extends AutoPlugin {
+ override lazy val trigger = allRequirements
+
+ override lazy val requires = JvmPlugin
+
+ object autoImport {
+ // run this task after "+ package" to get all versions included
+ val packageDistributions = taskKey[Seq[File]]("Packages zip and tar.gz binary distributions")
+ val packageZip = packageDistributionTask("zip")
+ val packageTarGz = packageDistributionTask("tar.gz")
+ }
+
+ import autoImport._
+
+ override def projectSettings: Seq[Def.Setting[_]] = Seq(
+ packageDistributions := Seq(
+ packageZip.value,
+ packageTarGz.value
+ )
+ )
+
+ private val classified = "-([a-z]+)\\.jar".r
+
+ def packageDistributionTask(ext: String): Def.Initialize[Task[File]] = Def.task {
+ val target = Keys.target.value
+ val binaries = target * "scala-*" ** "log4j-api-scala*.jar" pair { file =>
+ file.name match {
+ case classified(_) => None
+ case _ => Some(file.name)
+ }
+ }
+ val base = Keys.baseDirectory.value
+ val inputs = binaries ++ Seq(
+ (base / "LICENSE.txt", "LICENSE"),
+ (base / "NOTICE.txt", "NOTICE")
+ )
+ val version = Keys.version.value
+ val output = target / s"apache-log4j-api-scala-$version-bin.$ext"
+ ext match {
+ case "zip" => makeZip(inputs, output)
+ case "tar.gz" => makeTarGz(inputs, output)
+ case _ => sys.error(s"Unknown distribution extension: $ext")
+ }
+ output
+ }
+
+ def tarGz(sources: Traversable[(File, String)], output: File): Unit = {
+ val out = new TarArchiveOutputStream(new GZIPOutputStream(new FileOutputStream(output)))
+ for ((f, name) <- sources) {
+ out.putArchiveEntry(out.createArchiveEntry(f, name))
+ IO.transfer(f, out)
+ out.closeArchiveEntry()
+ }
+ out.finish()
+ out.close()
+ }
+
+ def makeTarGz(inputs: Traversable[(File, String)], output: File): Unit = {
+ val out = output.getAbsoluteFile
+ if (out.exists()) {
+ if (out.isFile) out.delete() else sys.error(s"Cannot write to file $out as it is not a file")
+ }
+ tarGz(inputs, out)
+ }
+
+ def makeZip(inputs: Traversable[(File, String)], output: File): Unit = {
+ val out = output.getAbsoluteFile
+ if (out.exists()) {
+ if (out.isFile) out.delete() else sys.error(s"Cannot write to file $out as it is not a file")
+ }
+ IO.zip(inputs, out)
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/ddc513c5/src/asciidoctor/changes.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/changes.adoc b/src/asciidoctor/changes.adoc
index fabd482..6682e8c 100644
--- a/src/asciidoctor/changes.adoc
+++ b/src/asciidoctor/changes.adoc
@@ -21,6 +21,7 @@
[vertical]
New Features::
[horizontal]
+LOG4J2-2303::: Add release distribution script.
LOG4J2-2295::: Add OSGi metadata to release jars.
LOG4J2-2294::: Add release audit information to build.
LOG4J2-2298::: Add changelog to site.
[11/50] [abbrv] logging-log4j-scala git commit: Add sbt branch to
allowed snapshots branches for deployment tests
Posted by ma...@apache.org.
Add sbt branch to allowed snapshots branches for deployment tests
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/938aada0
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/938aada0
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/938aada0
Branch: refs/heads/master
Commit: 938aada035261f608342fd16bba8cf22cb1158d9
Parents: e12bfd6
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 14:02:25 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 14:02:25 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/938aada0/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index 13614bb..c51e27c 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -39,7 +39,12 @@ pipeline {
}
}
stage('Deploy') {
- when { branch 'master' }
+ when {
+ anyOf {
+ branch 'master'
+ branch 'sbt'
+ }
+ }
steps {
ansiColor('xterm') {
withCredentials([
[26/50] [abbrv] logging-log4j-scala git commit: Add dynamic project
version for usage page
Posted by ma...@apache.org.
Add dynamic project version for usage page
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/c888b039
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/c888b039
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/c888b039
Branch: refs/heads/master
Commit: c888b039f90a98f0f82844de3a9e9207b327cc41
Parents: a6af7ec
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 19:26:25 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 19:26:25 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/usage.adoc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/c888b039/src/asciidoctor/usage.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/usage.adoc b/src/asciidoctor/usage.adoc
index 10fa6b9..9300963 100644
--- a/src/asciidoctor/usage.adoc
+++ b/src/asciidoctor/usage.adoc
@@ -19,10 +19,10 @@
Log4j Scala API requires Log4j API. An example SBT dependency setup:
.build.sbt
-[source,scala]
+[source,scala,subs=attributes]
----
libraryDependencies ++= Seq(
- "org.apache.logging.log4j" %% "log4j-api-scala" % "11.0",
+ "org.apache.logging.log4j" %% "log4j-api-scala" % "{project-version}",
"org.apache.logging.log4j" % "log4j-api" % "2.11.0",
"org.apache.logging.log4j" % "log4j-core" % "2.11.0" % Runtime)
----
[21/50] [abbrv] logging-log4j-scala git commit: Combine project info
into ModuleInfo
Posted by ma...@apache.org.
Combine project info into ModuleInfo
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/e37c29a5
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/e37c29a5
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/e37c29a5
Branch: refs/heads/master
Commit: e37c29a55f3f20a56f8dd6ec0c5fd2791f98a3b1
Parents: f0784da
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 18:57:47 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 18:57:47 2018 -0500
----------------------------------------------------------------------
build.sbt | 42 +++++++++++++++++++-----------------------
1 file changed, 19 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/e37c29a5/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 39f8ac7..b91cbb0 100644
--- a/build.sbt
+++ b/build.sbt
@@ -21,35 +21,31 @@ enablePlugins(org.apache.logging.log4j.scala.sbt.copyresources.CopyResourcesPlug
lazy val metadataSettings = Seq(
organization := "org.apache.logging.log4j",
- organizationName := "Apache Software Foundation",
- organizationHomepage := Some(url("https://www.apache.org/")),
- homepage := Some(url("https://logging.apache.org/log4j/scala/")),
- licenses := Seq("Apache License, Version 2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.txt")),
- scmInfo := Some(ScmInfo(
- url("https://git-wip-us.apache.org/repos/asf?p=logging-log4j-scala.git;a=summary"),
- "scm:git:http://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git",
- "scm:git:https://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git"
- )),
+ projectInfo := ModuleInfo(
+ nameFormal = "Apache Log4j Scala API",
+ description = "Scala logging API facade for Log4j",
+ homepage = Some(url("https://logging.apache.org/log4j/scala/")),
+ startYear = Some(2016),
+ licenses = Vector("Apache License, Version 2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.txt")),
+ organizationName = "Apache Software Foundation",
+ organizationHomepage = Some(url("https://www.apache.org/")),
+ scmInfo = Some(ScmInfo(
+ url("https://git-wip-us.apache.org/repos/asf?p=logging-log4j-scala.git;a=summary"),
+ "scm:git:http://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git",
+ "scm:git:https://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git"
+ )),
+ developers = Vector(
+ Developer("mikes", "Mikael Ståldal", "mikes@apache.org", null),
+ Developer("mattsicker", "Matt Sicker", "mattsicker@apache.org", null),
+ Developer("ggregory", "Gary Gregory", "ggregory@apache.org", null)
+ )
+ ),
pomExtra := {
<parent>
<groupId>org.apache.logging</groupId>
<artifactId>logging-parent</artifactId>
<version>2</version>
</parent>
- <developers>
- <developer>
- <id>mikes</id>
- <name>Mikael Ståldal</name>
- </developer>
- <developer>
- <id>mattsicker</id>
- <name>Matt Sicker</name>
- </developer>
- <developer>
- <id>ggregory</id>
- <name>Gary Gregory</name>
- </developer>
- </developers>
}
)
[22/50] [abbrv] logging-log4j-scala git commit: Add failure emails
for master builds
Posted by ma...@apache.org.
Add failure emails for master builds
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/421c39c2
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/421c39c2
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/421c39c2
Branch: refs/heads/master
Commit: 421c39c267abed825217dd286f584f6d1a571df6
Parents: e37c29a
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 19:47:50 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 19:47:50 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 5 +++++
1 file changed, 5 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/421c39c2/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index c51e27c..1af227b 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -57,6 +57,11 @@ pipeline {
}
}
}
+ post {
+ failure {
+ emailext body: "See <${env.BUILD_URL}>", replyTo: 'dev@logging.apache.org', subject: "[Scala] Jenkins build failure (#${env.BUILD_NUMBER})", 'notifications@logging.apache.org'
+ }
+ }
}
}
}
[44/50] [abbrv] logging-log4j-scala git commit: Remove obsolete files
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/js/jquery.min.js
----------------------------------------------------------------------
diff --git a/src/site/resources/js/jquery.min.js b/src/site/resources/js/jquery.min.js
deleted file mode 100644
index 198b3ff..0000000
--- a/src/site/resources/js/jquery.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p
;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e i
n b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==n
ull)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&
b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a
,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parse
Float(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.pro
totype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.
context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].
splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventLis
tener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return nul
l;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)bre
ak;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([
],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},brows
er:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test("Â ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.lengt
h;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,th
en:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(argument
s,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.st
yle.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendCh
ild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;b
order:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.rem
oveChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(
b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."
),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b
)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textare
a)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){
f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return
!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNod
e,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttr
ibute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{ta
bIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""
&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,
C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function
(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+
f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"ev
ents")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({
elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pa
geX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeun
load=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.s
topPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,".
_submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusi
n",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function"
)d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin
focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]
+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n
.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break
}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e
+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.len
gth,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?nu
ll:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[
3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},
password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b
,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=n
ull?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d
.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElement
ById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=functi
on(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.
call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.co
ntains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i
]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&t
his[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},co
ntents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summar
y|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="obje
ct"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:fun
ction(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach()
);return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0
];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(
a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createText
Node(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\
)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&
&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;i
f(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"au
to":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arg
uments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSe
nd".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m)
{if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHead
ers:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("
ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));tr
y{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(
j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&
e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.
readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style
){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&
(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,
c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a
,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;t
his.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.anim
atedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.el
<TRUNCATED>
[12/50] [abbrv] logging-log4j-scala git commit: Add LOG4J2-2291
changelog entry
Posted by ma...@apache.org.
Add LOG4J2-2291 changelog entry
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/5a358d74
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/5a358d74
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/5a358d74
Branch: refs/heads/master
Commit: 5a358d74a97174c46ac54f68d6ddd33b84746c85
Parents: 938aada
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 14:10:17 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 14:10:17 2018 -0500
----------------------------------------------------------------------
src/changes/changes.xml | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/5a358d74/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0458f58..8ec0d27 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -31,6 +31,9 @@
- "remove" - Removed
-->
<release version="11.1" date="2018-MM-DD" description="GA Release 11.1">
+ <action issue="LOG4J2-2291" dev="mattsicker" type="add">
+ Add Jenkins pipeline for SBT build.
+ </action>
<action issue="LOG4J2-2290" dev="mattsicker" type="update">
Update Log4j from 2.9.1 to 2.11.0.
</action>
[24/50] [abbrv] logging-log4j-scala git commit: Add rat plugin
Posted by ma...@apache.org.
Add rat plugin
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/34e39f8c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/34e39f8c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/34e39f8c
Branch: refs/heads/master
Commit: 34e39f8cd172b9ef78b208d910667945234defa5
Parents: 9c4d548
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 18:03:13 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 18:03:13 2018 -0500
----------------------------------------------------------------------
project/plugins.sbt | 2 ++
src/asciidoctor/index.adoc | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/34e39f8c/project/plugins.sbt
----------------------------------------------------------------------
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 0d7f53e..3007056 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -18,4 +18,6 @@ addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.1")
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.8")
addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.3.2")
+addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.0")
//addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.9.3")
+addSbtPlugin("org.musigma" % "sbt-rat" % "0.1")
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/34e39f8c/src/asciidoctor/index.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/index.adoc b/src/asciidoctor/index.adoc
index 33e0ceb..913809b 100644
--- a/src/asciidoctor/index.adoc
+++ b/src/asciidoctor/index.adoc
@@ -31,7 +31,7 @@ TODO:
* Apache logo
* Downloads page
* License report
-* Other reports?
* ScalaDocs links
* Project links
+* Dependency report
////
\ No newline at end of file
[39/50] [abbrv] logging-log4j-scala git commit: Upgrade to sbt-rat 0.2
Posted by ma...@apache.org.
Upgrade to sbt-rat 0.2
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/798a5cb9
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/798a5cb9
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/798a5cb9
Branch: refs/heads/master
Commit: 798a5cb968d8e600faca159c4d448e71f5094ddc
Parents: 011bef8
Author: Matt Sicker <bo...@gmail.com>
Authored: Sun Apr 1 13:46:03 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sun Apr 1 13:46:03 2018 -0500
----------------------------------------------------------------------
project/plugins.sbt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/798a5cb9/project/plugins.sbt
----------------------------------------------------------------------
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 3007056..e50648c 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -20,4 +20,4 @@ addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.3.2")
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.0")
//addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.9.3")
-addSbtPlugin("org.musigma" % "sbt-rat" % "0.1")
+addSbtPlugin("org.musigma" % "sbt-rat" % "0.2")
[33/50] [abbrv] logging-log4j-scala git commit: Add contributing info
to site
Posted by ma...@apache.org.
Add contributing info to site
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/7e2426b3
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/7e2426b3
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/7e2426b3
Branch: refs/heads/master
Commit: 7e2426b342adf58ff362ae55a36aa0ffbd522edf
Parents: a551039
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 20:23:02 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 20:23:02 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/contributing.adoc | 66 ++++++++++++++++++++++++++++++++++
src/asciidoctor/index.adoc | 2 ++
2 files changed, 68 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/7e2426b3/src/asciidoctor/contributing.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/contributing.adoc b/src/asciidoctor/contributing.adoc
new file mode 100644
index 0000000..4730d54
--- /dev/null
+++ b/src/asciidoctor/contributing.adoc
@@ -0,0 +1,66 @@
+////
+ 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.
+////
+== Contributing
+
+You have found a bug or you have an idea for a cool new feature?
+Contributing code is a great way to give something back to the open source community.
+Before you dig right into the code there are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
+
+=== Getting Started
+
+* Make sure you have a https://issues.apache.org/jira/[Jira account].
+* Make sure you have a https://github.com/signup/free[GitHub account].
+* If you're planning to implement a new feature it makes sense to discuss your changes on the https://logging.apache.org/log4j/2.x/mail-lists.html[dev list] first.
+ This way you can make sure you're not wasting your time on something that isn't considered to be in Apache Log4j's scope.
+* Submit a ticket for your issue, assuming one does not already exist.
+ * Clearly describe the issue including steps to reproduce when it is a bug.
+ * Make sure you fill in the earliest version that you know has the issue.
+* Fork the repository on GitHub.
+
+=== Making Changes
+
+* Create a topic branch from where you want to base your work (this is usually the master branch).
+* Make commits of logical units.
+* Respect the original code style:
+ * Only use spaces for indentation.
+ * Create minimal diffs - disable on save actions like reformat source code or organize imports.
+ If you feel the source code should be reformatted create a separate PR for this change.
+ * Check for unnecessary whitespace with `git diff --check` before committing.
+* Make sure your commit messages are in the proper format.
+ Your commit message should contain the key of the Jira issue.
+* Make sure you have added the necessary tests for your changes.
+* Run all the tests with `sbt "+ test"` to assure nothing else was accidentally broken.
+
+=== Making Trivial Changes
+
+For changes of a trivial nature to comments and documentation, it is not always necessary to create a new ticket in JIRA.
+In this case, it is appropriate to start the first line of a commit with '(doc)' instead of a ticket number.
+
+=== Submitting Changes
+
+* Sign the https://www.apache.org/licenses/#clas[Contributor License Agreement] if you haven't already.
+* Push your changes to a topic branch in your fork of the repository.
+* Submit a pull request to the repository in the apache organization.
+* Update your Jira ticket and include a link to the pull request in the ticket.
+
+=== Additional Resources
+
+* https://issues.apache.org/jira/browse/LOG4J2[Apache Log4j 2 Jira project page]
+* https://www.apache.org/licenses/#clas[Contributor License Agreement]
+* https://help.github.com/[General GitHub documentation]
+* https://help.github.com/send-pull-requests/[GitHub pull request documentation]
+
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/7e2426b3/src/asciidoctor/index.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/index.adoc b/src/asciidoctor/index.adoc
index 01ef6ce..319b5ee 100644
--- a/src/asciidoctor/index.adoc
+++ b/src/asciidoctor/index.adoc
@@ -30,6 +30,8 @@ include::changes.adoc[]
include::build.adoc[]
+include::contributing.adoc[]
+
////
TODO:
* Apache logo
[46/50] [abbrv] logging-log4j-scala git commit: Remove obsolete files
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/css/bootstrap.min.css
----------------------------------------------------------------------
diff --git a/src/site/resources/css/bootstrap.min.css b/src/site/resources/css/bootstrap.min.css
deleted file mode 100644
index 43e16d7..0000000
--- a/src/site/resources/css/bootstrap.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Bootstrap v2.2.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}input[type="search"]{-webkit-box-siz
ing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid r
gba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{
margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.9
3617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left
:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.9361702
1276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.con
tainer-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}.text-warning{color:#c09853}a.text-warning:hover{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover{color:#2d6987}.text-success{color:#468847}a.text-success:hover{color:#356635}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;b
order-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquo
te small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-r
adius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;paddi
ng:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,i
nput[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal;cursor:pointer}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin
-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:le
ft;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input
[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.co
ntrols-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;
-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;
-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-co
lor:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info>label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad
;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px
;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px
0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-i
nput{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn,.input-append select+.btn-group .btn,.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-a
ppend .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0
14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .h
ide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;paddin
g-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top
:2px solid #ddd}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bo
rdered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child,.table-bordered tfoot:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.ta
ble-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th
.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.warning td{background-color:#fcf8e3}.table tbody tr.info td{background-color:#d9edf7}.table-hover tbody tr.success:hover td{background-colo
r:#d0e9c6}.table-hover tbody tr.error:hover td{background-color:#ebcccc}.table-hover tbody tr.warning:hover td{background-color:#faf2cc}.table-hover tbody tr.info:hover td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-i
mage:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.ic
on-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-
position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{backgrou
nd-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon
-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-
position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-h
and-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparen
t;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.
dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#333;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXIm
ageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent;background-image:none}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0
;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1p
x rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline
-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;*line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #bbb;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft
.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-b
ox-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:2px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini{padding:1px 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:b
order-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,0.15) rgba(0,0,0,0.15) rgba(0,0,0,0.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088c
c',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',Gradi
entType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DX
ImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient
(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hov
er,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled
]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover{color:#333;text-decoration:none}.bt
n-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar .btn+.btn,.btn-toolbar .btn-group+.btn,.btn-toolbar .btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px}.btn-group>.btn-mini{font-size:11px}.btn-group>.btn-small{font-size:12px}.btn-group>.btn-large{font-size:16px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radiu
s:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0
rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-
toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical .btn{display:block;float:none;width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical .btn+.btn{ma
rgin-top:-1px;margin-left:0}.btn-group-vertical .btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical .btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical .btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical .btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;color:#c09853;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-danger,.alert-error{color:#b94a48;background-color:
#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2
px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-
bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bott
om:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=
100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{f
loat:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible;color
:#777}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;fl
oat:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px}.navbar-link{color:#777}.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-fo
rm .input-prepend{margin-top:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-st
atic-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav
>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImage
Transform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;bo
rder-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .care
t,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse{color:#999}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(t
op,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;b
ackground-color:#111}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-place
holder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff
040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb .divider{padding:0 5px;color:#ccc}.breadcrumb .active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(
0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;
-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first
-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:1px 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#f
ff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;width:560px;margin:-250px 0 0 -280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-bo
x;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{mar
gin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;b
order-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{
padding:9px 14px}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.popover .arrow,.popover .arrow:after{position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow:after{z-index:-1;content:""}.popover.top .arrow{bottom:-10px;left:50%;margin-left:-10px;border-top-color:#fff;border-width:10px 10px 0}.popover.top .arrow:after{bottom:-1px;left:-11px;border-top-color:rgba(0,0,0,0.25);border-width:11px 11px 0}.popover.right .arrow{top:50%;left:-10px;margin-top:-10px;border-right-color:#fff;border-width:10px 10px 10px 0}.popover.right .arrow:after{bottom:-11px;left:-1px;border-right-color:rgba(0,0,0,0.25);border-width:11px 11px 11px 0}.popover.bottom .arrow{top:-10px;left:50%;margin-left:-10px;border-bottom-color:#fff;border-width:0 10px 10px}.popover.bottom .arrow:after{top:-1px;left:-11px;border-bottom-color:rgba(0,0,0,0.25);border-width:0 11px 11px}.popover.left .arrow{top:50%;right:-10px;margin-top:-10px;
border-left-color:#fff;border-width:10px 0 10px 10px}.popover.left .arrow:after{right:-1px;bottom:-11px;border-left-color:rgba(0,0,0,0.25);border-width:11px 0 11px 11px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgb
a(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media .pull-left{margin-right:10px}.media .pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href
],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40p
x 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{hei
<TRUNCATED>
[15/50] [abbrv] logging-log4j-scala git commit: LOG4J2-2293: Add
required license files to SBT output artifacts
Posted by ma...@apache.org.
LOG4J2-2293: Add required license files to SBT output artifacts
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/1f4b789c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/1f4b789c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/1f4b789c
Branch: refs/heads/master
Commit: 1f4b789c3011a124d0d1c9ce3bceb29afb7c3ee8
Parents: 814f77d
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 16:03:11 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 16:03:11 2018 -0500
----------------------------------------------------------------------
build.sbt | 26 ++++++++++++++++++---
project/CopyResourcesPlugin.scala | 42 ++++++++++++++++++++++++++++++++++
src/changes/changes.xml | 3 +++
3 files changed, 68 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/1f4b789c/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 386e479..5f52ed9 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,6 +1,24 @@
+/*
+ * 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.
+ */
import Dependencies._
//import OsgiKeys._
+enablePlugins(org.apache.logging.log4j.scala.sbt.copyresources.CopyResourcesPlugin)
+
lazy val metadataSettings = Seq(
organization := "org.apache.logging.log4j",
organizationName := "Apache Software Foundation",
@@ -58,9 +76,11 @@ lazy val publishSettings = Seq(
} yield Credentials("Sonatype Nexus Repository Manager", "repository.apache.org", username, password)
}.toList,
// FIXME: https://github.com/sbt/sbt/issues/3519
- updateOptions := updateOptions.value.withGigahorse(false)
- // managedResources
-// resourceGenerators in Compile += inlineTask(Seq(file("LICENSE.txt"), file("NOTICE.txt")))
+ updateOptions := updateOptions.value.withGigahorse(false),
+ extraResources := Seq(
+ (baseDirectory.value / "LICENSE.txt", "META-INF/LICENSE"),
+ (baseDirectory.value / "NOTICE.txt", "META-INF/NOTICE")
+ )
)
lazy val releaseSettings = Seq(
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/1f4b789c/project/CopyResourcesPlugin.scala
----------------------------------------------------------------------
diff --git a/project/CopyResourcesPlugin.scala b/project/CopyResourcesPlugin.scala
new file mode 100644
index 0000000..4c3b616
--- /dev/null
+++ b/project/CopyResourcesPlugin.scala
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala.sbt.copyresources
+
+import sbt.Keys._
+import sbt._
+
+/**
+ * Simple SBT plugin to copy in configured files into all output jars.
+ */
+object CopyResourcesPlugin extends AutoPlugin {
+
+ object autoImport {
+ val extraResources = taskKey[Seq[(File, String)]]("Additional files to copy into packages")
+
+ lazy val baseCopyResourceSettings: Seq[Setting[_]] = Seq(
+ extraResources := Nil,
+ mappings in (Compile, packageBin) ++= extraResources.value,
+ mappings in (Compile, packageSrc) ++= extraResources.value,
+ mappings in (Compile, packageDoc) ++= extraResources.value
+ )
+ }
+
+ import autoImport._
+
+ override lazy val projectSettings: Seq[Setting[_]] = baseCopyResourceSettings
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/1f4b789c/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8909c8b..f3863eb 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -31,6 +31,9 @@
- "remove" - Removed
-->
<release version="11.1" date="2018-MM-DD" description="GA Release 11.1">
+ <action issue="LOG4J2-2293" dev="mattsicker" type="add">
+ Add required license files to SBT output artifacts.
+ </action>
<action issue="LOG4J2-2296" dev="mattsicker" type="add">
Add sbt-site plugin and website configuration.
</action>
[13/50] [abbrv] logging-log4j-scala git commit: Add LOG4J2-2296
changelog entry
Posted by ma...@apache.org.
Add LOG4J2-2296 changelog entry
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/47899ea8
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/47899ea8
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/47899ea8
Branch: refs/heads/master
Commit: 47899ea8af30a10911ed0c3ba5e51515d798ec08
Parents: 5a358d7
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 14:12:20 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 14:12:20 2018 -0500
----------------------------------------------------------------------
src/changes/changes.xml | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/47899ea8/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8ec0d27..8909c8b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -31,6 +31,9 @@
- "remove" - Removed
-->
<release version="11.1" date="2018-MM-DD" description="GA Release 11.1">
+ <action issue="LOG4J2-2296" dev="mattsicker" type="add">
+ Add sbt-site plugin and website configuration.
+ </action>
<action issue="LOG4J2-2291" dev="mattsicker" type="add">
Add Jenkins pipeline for SBT build.
</action>
[10/50] [abbrv] logging-log4j-scala git commit: LOG4J2-2291: Add
Jenkins pipeline for SBT build
Posted by ma...@apache.org.
LOG4J2-2291: Add Jenkins pipeline for SBT build
Add credential id and config for publishing snapshots.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/e12bfd6a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/e12bfd6a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/e12bfd6a
Branch: refs/heads/master
Commit: e12bfd6a347513df441af1208f4c155c4a809f6d
Parents: 722c1f5
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 13:59:50 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 13:59:50 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 12 ++++++++----
build.sbt | 17 +++++++++++------
2 files changed, 19 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/e12bfd6a/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index 032d4d1..13614bb 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -42,12 +42,16 @@ pipeline {
when { branch 'master' }
steps {
ansiColor('xterm') {
- sh './sbt -batch "+ publish"'
- // FIXME: LOG4J2-2291
- archiveArtifacts artifacts: 'target/repository/**'
+ withCredentials([
+ usernamePassword(
+ credentialsId: 'logging-snapshots',
+ passwordVariable: 'NEXUS_PASSWORD',
+ usernameVariable: 'NEXUS_USERNAME')
+ ]) {
+ sh './sbt -batch "+ publish"'
+ }
}
}
}
}
}
-
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/e12bfd6a/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 6dba52b..386e479 100644
--- a/build.sbt
+++ b/build.sbt
@@ -46,15 +46,20 @@ lazy val publishSettings = Seq(
publishArtifact in Test := false,
publishTo := {
if (isSnapshot.value) {
- // FIXME: LOG4J2-2291
- //Some("Apache Snapshots" at "https://repository.apache.org/content/repositories/snapshots")
- Some(Resolver.file("file", file("target/repository/")))
+ Some("Apache Snapshots" at "https://repository.apache.org/content/repositories/snapshots")
} else {
Some("Apache Releases" at "https://repository.apache.org/service/local/staging/deploy/maven2")
}
- }
-// credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
-// managedResources
+ },
+ credentials ++= {
+ for {
+ username <- sys.env.get("NEXUS_USERNAME")
+ password <- sys.env.get("NEXUS_PASSWORD")
+ } yield Credentials("Sonatype Nexus Repository Manager", "repository.apache.org", username, password)
+ }.toList,
+ // FIXME: https://github.com/sbt/sbt/issues/3519
+ updateOptions := updateOptions.value.withGigahorse(false)
+ // managedResources
// resourceGenerators in Compile += inlineTask(Seq(file("LICENSE.txt"), file("NOTICE.txt")))
)
[18/50] [abbrv] logging-log4j-scala git commit: Extract methods in
sbt plugin
Posted by ma...@apache.org.
Extract methods in sbt plugin
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/d245e724
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/d245e724
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/d245e724
Branch: refs/heads/master
Commit: d245e724c8f3d7b6fa8f4f25c4a20807edb23527
Parents: f8d3f94
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 17:44:46 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 17:44:46 2018 -0500
----------------------------------------------------------------------
project/CopyResourcesPlugin.scala | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/d245e724/project/CopyResourcesPlugin.scala
----------------------------------------------------------------------
diff --git a/project/CopyResourcesPlugin.scala b/project/CopyResourcesPlugin.scala
index 4c3b616..32b6104 100644
--- a/project/CopyResourcesPlugin.scala
+++ b/project/CopyResourcesPlugin.scala
@@ -28,11 +28,17 @@ object CopyResourcesPlugin extends AutoPlugin {
val extraResources = taskKey[Seq[(File, String)]]("Additional files to copy into packages")
lazy val baseCopyResourceSettings: Seq[Setting[_]] = Seq(
- extraResources := Nil,
- mappings in (Compile, packageBin) ++= extraResources.value,
- mappings in (Compile, packageSrc) ++= extraResources.value,
- mappings in (Compile, packageDoc) ++= extraResources.value
- )
+ extraResources := Nil
+ ) ++ addExtraResourcesInAll(Compile)(packageBin, packageSrc, packageDoc)
+
+ def addExtraResourcesIn(configuration: Configuration, scope: Scoped): Setting[Task[Seq[(File, String)]]] =
+ mappings in (configuration, scope) ++= extraResources.value
+
+ def addExtraResourcesInAll(configurations: Configuration*)(scopes: Scoped*): Seq[Setting[Task[Seq[(File, String)]]]] =
+ for {
+ configuration <- configurations
+ scope <- scopes
+ } yield addExtraResourcesIn(configuration, scope)
}
import autoImport._
[42/50] [abbrv] logging-log4j-scala git commit: Update build
instructions
Posted by ma...@apache.org.
Update build instructions
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/2080b517
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/2080b517
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/2080b517
Branch: refs/heads/master
Commit: 2080b517f4698768aa18e93eadb6419665715d1d
Parents: 94faa79
Author: Matt Sicker <bo...@gmail.com>
Authored: Mon Apr 2 15:48:45 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Mon Apr 2 15:54:52 2018 -0500
----------------------------------------------------------------------
BUILDING.md | 4 ++++
README.md | 8 ++++----
2 files changed, 8 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/2080b517/BUILDING.md
----------------------------------------------------------------------
diff --git a/BUILDING.md b/BUILDING.md
index 1fea4bb..a1bebb3 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -17,3 +17,7 @@
# Building Log4j 2 Scala API
Moved to [site docs](./src/asciidoctor/build.adoc).
+
+Summary:
+
+ ./sbt "+ publishM2"
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/2080b517/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index f2c2918..605ef66 100644
--- a/README.md
+++ b/README.md
@@ -19,8 +19,8 @@ SBT users can add the following dependencies to their `build.sbt` file:
```scala
libraryDependencies ++= Seq(
"org.apache.logging.log4j" %% "log4j-api-scala" % "11.0",
- "org.apache.logging.log4j" % "log4j-api" % "2.8.2",
- "org.apache.logging.log4j" % "log4j-core" % "2.8.2" % Runtime
+ "org.apache.logging.log4j" % "log4j-api" % "2.11.0",
+ "org.apache.logging.log4j" % "log4j-core" % "2.11.0" % Runtime
)
```
@@ -77,11 +77,11 @@ JIRA issue in the Pull Request.
## Building From Source
-Log4j Scala API requires Maven 3 and Java 8 to build. To install to your local
+Log4j Scala API requires Java 8 to build. To install to your local
Maven repository, execute the following:
```sh
-mvn install
+./sbt "+ publishM2"
```
## Contributing
[49/50] [abbrv] logging-log4j-scala git commit: Remove obsolete files
Posted by ma...@apache.org.
Remove obsolete files
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/ffcbc036
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/ffcbc036
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/ffcbc036
Branch: refs/heads/master
Commit: ffcbc03624fbdef97289cbd531e54a5ce90a9434
Parents: ddc513c
Author: Matt Sicker <bo...@gmail.com>
Authored: Tue Apr 3 16:01:36 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Tue Apr 3 16:01:36 2018 -0500
----------------------------------------------------------------------
log4j-scala-distribution/pom.xml | 134 ---------------------
log4j-scala-distribution/src/assembly/bin.xml | 58 ---------
log4j-scala-distribution/src/assembly/src.xml | 76 ------------
3 files changed, 268 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/ffcbc036/log4j-scala-distribution/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-scala-distribution/pom.xml b/log4j-scala-distribution/pom.xml
deleted file mode 100644
index 80bb523..0000000
--- a/log4j-scala-distribution/pom.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?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-scala</artifactId>
- <version>12.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <artifactId>log4j-scala-distribution</artifactId>
- <packaging>pom</packaging>
- <name>Apache Log4j Scala API Distribution</name>
- <description>Scala wrapper for Log4j API</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.10</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.10</artifactId>
- <version>${project.version}</version>
- <classifier>sources</classifier>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.10</artifactId>
- <version>${project.version}</version>
- <classifier>javadoc</classifier>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.11</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.11</artifactId>
- <version>${project.version}</version>
- <classifier>sources</classifier>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.11</artifactId>
- <version>${project.version}</version>
- <classifier>javadoc</classifier>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.12</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.12</artifactId>
- <version>${project.version}</version>
- <classifier>sources</classifier>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.12</artifactId>
- <version>${project.version}</version>
- <classifier>javadoc</classifier>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <executions>
- <!-- As the main Apache pom only builds source zip archives but
- commons wants both zip and tar.gz and because this is configured
- in the assembly, we need to use a specific assembly. That also allows
- naming the final artifact as -src not -source-release.
- -->
- <execution>
- <id>log4j-scala-source-release-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- <configuration>
- <finalName>apache-log4j-scala-${project.version}</finalName>
- <descriptors>
- <descriptor>src/assembly/src.xml</descriptor>
- </descriptors>
- <tarLongFileMode>gnu</tarLongFileMode>
- </configuration>
- </execution>
- <execution>
- <id>binary</id>
- <configuration>
- <finalName>apache-log4j-scala-${project.version}</finalName>
- <descriptors>
- <descriptor>src/assembly/bin.xml</descriptor>
- </descriptors>
- <tarLongFileMode>gnu</tarLongFileMode>
- </configuration>
- <goals>
- <goal>single</goal>
- </goals>
- <phase>package</phase>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-site-plugin</artifactId>
- <version>3.0</version>
- <configuration>
- <skip>true</skip>
- <skipDeploy>true</skipDeploy>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/ffcbc036/log4j-scala-distribution/src/assembly/bin.xml
----------------------------------------------------------------------
diff --git a/log4j-scala-distribution/src/assembly/bin.xml b/log4j-scala-distribution/src/assembly/bin.xml
deleted file mode 100644
index 7e95c5a..0000000
--- a/log4j-scala-distribution/src/assembly/bin.xml
+++ /dev/null
@@ -1,58 +0,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.
- -->
-<assembly>
- <id>bin</id>
- <formats>
- <format>tar.gz</format>
- <format>zip</format>
- </formats>
- <baseDirectory>apache-log4j-scala-${project.version}-bin</baseDirectory>
- <includeSiteDirectory>false</includeSiteDirectory>
- <moduleSets>
- <moduleSet>
- <useAllReactorProjects>true</useAllReactorProjects>
- </moduleSet>
- </moduleSets>
- <dependencySets>
- <dependencySet>
- <includes>
- <include>org.apache.logging.log4j:log4j-*</include>
- </includes>
- <outputDirectory></outputDirectory>
- <unpack>false</unpack>
- </dependencySet>
- </dependencySets>
-
- <fileSets>
- <fileSet>
- <directory>..</directory>
- <includes>
- <include>LICENSE.txt</include>
- <include>NOTICE.txt</include>
- </includes>
- </fileSet>
- </fileSets>
- <!--
- <files>
- <file>
- <source>../RELEASE-NOTES.md</source>
- <outputDirectory>.</outputDirectory>
- <destName>RELEASE-NOTES.md</destName>
- </file>
- </files>
- -->
-</assembly>
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/ffcbc036/log4j-scala-distribution/src/assembly/src.xml
----------------------------------------------------------------------
diff --git a/log4j-scala-distribution/src/assembly/src.xml b/log4j-scala-distribution/src/assembly/src.xml
deleted file mode 100644
index aa0dc59..0000000
--- a/log4j-scala-distribution/src/assembly/src.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?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.
- -->
-
-<assembly>
- <id>src</id>
- <formats>
- <format>zip</format>
- <format>tar.gz</format>
- </formats>
- <baseDirectory>apache-log4j-scala-${project.version}-src</baseDirectory>
- <fileSets>
- <!-- main project directory structure -->
- <fileSet>
- <directory>..</directory>
- <outputDirectory>/</outputDirectory>
- <useDefaultExcludes>true</useDefaultExcludes>
- <excludes>
- <!-- build output -->
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/).*${project.build.directory}.*]</exclude>
-
- <!-- NOTE: Most of the following excludes should not be required
- if the standard release process is followed. This is because the
- release plugin checks out project sources into a location like
- target/checkout, then runs the build from there. The result is
- a source-release archive that comes from a pretty clean directory
- structure.
-
- HOWEVER, if the release plugin is configured to run extra goals
- or generate a project website, it's definitely possible that some
- of these files will be present. So, it's safer to exclude them.
- -->
-
- <!-- IDEs -->
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?maven-eclipse\.xml]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.project]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.classpath]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iws]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.ipr]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iml]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.idea(/.*)?]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.settings(/.*)?]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.externalToolBuilders(/.*)?]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.deployables(/.*)?]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.wtpmodules(/.*)?]</exclude>
-
- <!-- misc -->
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?cobertura\.ser]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?doap_vfs\.rdf]</exclude>
-
- <!-- release-plugin temp files -->
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?pom\.xml\.releaseBackup]</exclude>
- <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?release\.properties]</exclude>
- </excludes>
- </fileSet>
- <!-- license, readme, etc. calculated at build time
- <fileSet>
- <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
- <outputDirectory>/</outputDirectory>
- </fileSet> -->
- </fileSets>
-</assembly>
[07/50] [abbrv] logging-log4j-scala git commit: Fix packaging issues
with macro file
Posted by ma...@apache.org.
Fix packaging issues with macro file
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/53cfa5db
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/53cfa5db
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/53cfa5db
Branch: refs/heads/master
Commit: 53cfa5db91e59f28026032ba0ab341001a3e78a9
Parents: 47ba596
Author: Matt Sicker <bo...@gmail.com>
Authored: Thu Mar 29 15:04:22 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Thu Mar 29 15:04:22 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 4 +-
build.sbt | 42 +-
project/Dependencies.scala | 17 +-
.../logging/log4j/scala/LoggerMacro.scala | 425 +++++++++++++++++++
.../logging/log4j/scala/LoggerMacro.scala | 425 -------------------
5 files changed, 466 insertions(+), 447 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index a117fc0..032d4d1 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -42,9 +42,9 @@ pipeline {
when { branch 'master' }
steps {
ansiColor('xterm') {
+ sh './sbt -batch "+ publish"'
// FIXME: LOG4J2-2291
- //sh './sbt -batch "+ publish"'
- archiveArtifacts artifacts: 'target/**/*.jar', fingerprint: true
+ archiveArtifacts artifacts: 'target/repository/**'
}
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 5cc1c21..118337c 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,4 +1,5 @@
import Dependencies._
+//import OsgiKeys._
lazy val metadataSettings = Seq(
organization := "org.apache.logging.log4j",
@@ -45,41 +46,48 @@ lazy val publishSettings = Seq(
publishArtifact in Test := false,
publishTo := {
if (isSnapshot.value) {
- Some("Apache Snapshots" at "https://repository.apache.org/content/repositories/snapshots")
+ // FIXME: LOG4J2-2291
+ //Some("Apache Snapshots" at "https://repository.apache.org/content/repositories/snapshots")
+ Some(Resolver.file("file", file("target/repository/")))
} else {
Some("Apache Releases" at "https://repository.apache.org/service/local/staging/deploy/maven2")
}
- },
- credentials += Credentials(Path.userHome / ".ivy2" / ".credentials"),
+ }
+// credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
// managedResources
// resourceGenerators in Compile += inlineTask(Seq(file("LICENSE.txt"), file("NOTICE.txt")))
)
lazy val releaseSettings = Seq(
- releaseCrossBuild := true
+ releaseCrossBuild := true,
+ apiURL := Some(url(s"https://logging.apache.org/log4j/scala/log4j-api-scala_${scalaBinaryVersion.value}/scaladocs/"))
)
lazy val apiDependencies = Seq(
libraryDependencies ++= Seq(
- "org.scala-lang" % "scala-reflect" % scalaVersion.value,
- "org.apache.logging.log4j" % "log4j-api" % log4j,
- "org.apache.logging.log4j" % "log4j-api" % log4j % Test classifier "tests",
- "junit" % "junit" % junit % Test,
- "org.scalatest" %% "scalatest" % scalatest % Test,
- "org.mockito" % "mockito-core" % mockito % Test
+ scalaReflect(scalaVersion.value),
+ osgiCoreApi,
+ log4jApi,
+ log4jApiTests,
+ junit,
+ scalatest,
+ mockito
)
)
lazy val apiInputFiles = Seq(
- sources in Compile := {
- val filteredFiles = {
- for ((_, minor) <- CrossVersion.partialVersion(scalaVersion.value) if minor == 10)
- yield ((baseDirectory.value / "src" / "main" / "scala") ** "*Macro.scala").get
- }.getOrElse(Seq())
- (sources in Compile).value.filterNot(filteredFiles.contains)
+ unmanagedSources in Compile := {
+ val Some((_, minor)) = CrossVersion.partialVersion(scalaVersion.value)
+ val extras = if (minor > 10) ((baseDirectory.value / "src" / "main" / "scala-2.11+") ** "*.scala").get else Nil
+ (unmanagedSources in Compile).value ++ extras
}
)
+//lazy val bundleSettings = osgiSettings ++ Seq(
+// bundleSymbolicName := "org.apache.logging.log4j.scala",
+// exportPackage := Seq("org.apache.logging.log4j.scala")
+//)
+
lazy val root = (project in file("."))
.settings(name := "log4j-api-scala")
.settings(metadataSettings: _*)
@@ -88,6 +96,8 @@ lazy val root = (project in file("."))
.settings(releaseSettings: _*)
.settings(apiDependencies: _*)
.settings(apiInputFiles: _*)
+// .enablePlugins(SbtOsgi)
+// .settings(bundleSettings: _*)
//lazy val nopublish = Seq(
// publish := {},
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/project/Dependencies.scala
----------------------------------------------------------------------
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index be85a27..0de9510 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -1,10 +1,19 @@
+import sbt._
+
object Dependencies {
val scala210 = "2.10.7"
val scala211 = "2.11.12"
val scala212 = "2.12.4"
val scala213 = "2.13.0-M2"
- val log4j = "2.11.0"
- val junit = "4.12"
- val scalatest = "3.0.4"
- val mockito = "1.10.19"
+
+ def scalaReflect(version: String): ModuleID =
+ "org.scala-lang" % "scala-reflect" % version
+
+ val osgiCoreApi = "org.osgi" % "org.osgi.core" % "4.3.0" % Provided
+ private val log4jV = "2.11.0"
+ val log4jApi = "org.apache.logging.log4j" % "log4j-api" % log4jV
+ val log4jApiTests = "org.apache.logging.log4j" % "log4j-api" % log4jV % Test classifier "tests"
+ val junit = "junit" % "junit" % "4.12" % Test
+ val scalatest = "org.scalatest" %% "scalatest" % "3.0.4" % Test
+ val mockito = "org.mockito" % "mockito-core" % "1.10.19" % Test
}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/src/main/scala-2.11+/org/apache/logging/log4j/scala/LoggerMacro.scala
----------------------------------------------------------------------
diff --git a/src/main/scala-2.11+/org/apache/logging/log4j/scala/LoggerMacro.scala b/src/main/scala-2.11+/org/apache/logging/log4j/scala/LoggerMacro.scala
new file mode 100644
index 0000000..3b54db1
--- /dev/null
+++ b/src/main/scala-2.11+/org/apache/logging/log4j/scala/LoggerMacro.scala
@@ -0,0 +1,425 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala
+
+import org.apache.logging.log4j.message.{EntryMessage, Message}
+import org.apache.logging.log4j.spi.AbstractLogger
+import org.apache.logging.log4j.{Level, Marker}
+
+import scala.language.experimental.macros
+import scala.reflect.macros.blackbox
+
+/**
+ * Inspired from [[https://github.com/typesafehub/scalalogging ScalaLogging]].
+ */
+private object LoggerMacro {
+
+ type LoggerContext = blackbox.Context { type PrefixType = Logger }
+
+
+ def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
+ logMarkerMsg(c)(c.universe.reify(Level.FATAL), marker, message)
+
+ def fatalMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.FATAL), marker, message)
+
+ def fatalMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(c)(c.universe.reify(Level.FATAL), 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 fatalMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause)
+
+ def fatalMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 fatalCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.FATAL), message)
+
+ def fatalObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 fatalCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
+
+ def fatalObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 errorMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.ERROR), marker, message)
+
+ def errorMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 errorMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
+
+ def errorMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 errorCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.ERROR), message)
+
+ def errorObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 errorCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
+
+ def errorObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 warnMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.WARN), marker, message)
+
+ def warnMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 warnMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
+
+ def warnMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 warnCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.WARN), message)
+
+ def warnObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 warnCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.WARN), message, cause)
+
+ def warnObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 infoMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.INFO), marker, message)
+
+ def infoMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 infoMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
+
+ def infoMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 infoCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.INFO), message)
+
+ def infoObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 infoCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.INFO), message, cause)
+
+ def infoObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 debugMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.DEBUG), marker, message)
+
+ def debugMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 debugMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
+
+ def debugMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 debugCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.DEBUG), message)
+
+ def debugObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 debugCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
+
+ def debugObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 traceMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.TRACE), marker, message)
+
+ def traceMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 traceMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
+
+ def traceMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 traceCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.TRACE), message)
+
+ def traceObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 traceCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
+
+ def traceObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 logMarkerCseq(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ 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 logMarkerObject(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ 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 logMarkerCseqThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence], 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 logMarkerObjectThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef], 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 logCseq(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence]) =
+ c.universe.reify(
+ if (c.prefix.splice.delegate.isEnabled(level.splice)) {
+ c.prefix.splice.logMessage(level.splice, null, message.splice, null)
+ }
+ )
+
+ def logObject(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef]) =
+ 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 logCseqThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence], 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 logObjectThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef], 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 traceEntry(c: LoggerContext)(): c.Expr[EntryMessage] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceEntry()
+ )
+
+ def traceEntryParams(c: LoggerContext)(params: c.Expr[AnyRef]*): c.Expr[EntryMessage] = {
+ import c.universe._
+ val isEnabled = Apply(
+ Select(Select(c.prefix.tree, TermName("delegate")), TermName("isEnabled")),
+ List(
+ reify(Level.TRACE).tree,
+ reify(AbstractLogger.ENTRY_MARKER).tree,
+ reify(null: AnyRef).tree,
+ reify(null).tree
+ )
+ )
+
+ val log = Apply(
+ Select(Select(c.prefix.tree, TermName("delegate")), TermName("traceEntry")),
+ reify(null: String).tree :: (params map (_.tree)).toList
+ )
+ c.Expr[EntryMessage](If(isEnabled, log, reify(null).tree))
+ }
+
+
+ def traceEntryMessage(c: LoggerContext)(message: c.Expr[Message]): c.Expr[EntryMessage] =
+ c.universe.reify(
+ if (c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null: AnyRef, null)) {
+ c.prefix.splice.delegate.traceEntry(message.splice) // TODO should not do ifEnabled check
+ } else {
+ null
+ }
+ )
+
+ def traceExit(c: LoggerContext)(): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit()
+ )
+
+ def traceExitResult[R: c.WeakTypeTag](c: LoggerContext)(result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(result.splice)
+ )
+
+ def traceExitEntryMessage(c: LoggerContext)(entryMessage: c.Expr[EntryMessage]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(entryMessage.splice)
+ )
+
+ def traceExitEntryMessageResult[R: c.WeakTypeTag](c: LoggerContext)(entryMessage: c.Expr[EntryMessage], result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(entryMessage.splice, result.splice)
+ )
+
+ def traceExitMessageResult[R: c.WeakTypeTag](c: LoggerContext)(message: c.Expr[Message], result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ {
+ if (message.splice != null && c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, message.splice, null)) {
+ c.prefix.splice.delegate.traceExit(message.splice, result.splice) // TODO should not do ifEnabled check
+ }
+ result.splice
+ }
+ )
+
+ def throwing[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(t: c.Expr[T]): c.Expr[T] =
+ c.universe.reify(
+ c.prefix.splice.delegate.throwing(t.splice)
+ )
+
+ def throwingLevel[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(level: c.Expr[Level], t: c.Expr[T]): c.Expr[T] =
+ c.universe.reify(
+ c.prefix.splice.delegate.throwing(level.splice, t.splice)
+ )
+
+ def catching(c: LoggerContext)(t: c.Expr[Throwable]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.catching(t.splice)
+ )
+
+ def catchingLevel(c: LoggerContext)(level: c.Expr[Level], t: c.Expr[Throwable]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.catching(level.splice, t.splice)
+ )
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/53cfa5db/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
----------------------------------------------------------------------
diff --git a/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala b/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
deleted file mode 100644
index 3b54db1..0000000
--- a/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
+++ /dev/null
@@ -1,425 +0,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.
- */
-package org.apache.logging.log4j.scala
-
-import org.apache.logging.log4j.message.{EntryMessage, Message}
-import org.apache.logging.log4j.spi.AbstractLogger
-import org.apache.logging.log4j.{Level, Marker}
-
-import scala.language.experimental.macros
-import scala.reflect.macros.blackbox
-
-/**
- * Inspired from [[https://github.com/typesafehub/scalalogging ScalaLogging]].
- */
-private object LoggerMacro {
-
- type LoggerContext = blackbox.Context { type PrefixType = Logger }
-
-
- def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
- logMarkerMsg(c)(c.universe.reify(Level.FATAL), marker, message)
-
- def fatalMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.FATAL), marker, message)
-
- def fatalMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(c)(c.universe.reify(Level.FATAL), 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 fatalMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause)
-
- def fatalMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 fatalCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.FATAL), message)
-
- def fatalObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 fatalCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
-
- def fatalObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 errorMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.ERROR), marker, message)
-
- def errorMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 errorMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
-
- def errorMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 errorCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.ERROR), message)
-
- def errorObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 errorCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
-
- def errorObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 warnMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.WARN), marker, message)
-
- def warnMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 warnMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
-
- def warnMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 warnCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.WARN), message)
-
- def warnObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 warnCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.WARN), message, cause)
-
- def warnObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 infoMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.INFO), marker, message)
-
- def infoMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 infoMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
-
- def infoMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 infoCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.INFO), message)
-
- def infoObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 infoCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.INFO), message, cause)
-
- def infoObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 debugMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.DEBUG), marker, message)
-
- def debugMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 debugMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
-
- def debugMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 debugCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.DEBUG), message)
-
- def debugObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 debugCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
-
- def debugObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 traceMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.TRACE), marker, message)
-
- def traceMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 traceMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
-
- def traceMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 traceCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.TRACE), message)
-
- def traceObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 traceCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
-
- def traceObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 logMarkerCseq(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- 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 logMarkerObject(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- 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 logMarkerCseqThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence], 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 logMarkerObjectThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef], 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 logCseq(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence]) =
- c.universe.reify(
- if (c.prefix.splice.delegate.isEnabled(level.splice)) {
- c.prefix.splice.logMessage(level.splice, null, message.splice, null)
- }
- )
-
- def logObject(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef]) =
- 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 logCseqThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence], 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 logObjectThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef], 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 traceEntry(c: LoggerContext)(): c.Expr[EntryMessage] =
- c.universe.reify(
- c.prefix.splice.delegate.traceEntry()
- )
-
- def traceEntryParams(c: LoggerContext)(params: c.Expr[AnyRef]*): c.Expr[EntryMessage] = {
- import c.universe._
- val isEnabled = Apply(
- Select(Select(c.prefix.tree, TermName("delegate")), TermName("isEnabled")),
- List(
- reify(Level.TRACE).tree,
- reify(AbstractLogger.ENTRY_MARKER).tree,
- reify(null: AnyRef).tree,
- reify(null).tree
- )
- )
-
- val log = Apply(
- Select(Select(c.prefix.tree, TermName("delegate")), TermName("traceEntry")),
- reify(null: String).tree :: (params map (_.tree)).toList
- )
- c.Expr[EntryMessage](If(isEnabled, log, reify(null).tree))
- }
-
-
- def traceEntryMessage(c: LoggerContext)(message: c.Expr[Message]): c.Expr[EntryMessage] =
- c.universe.reify(
- if (c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null: AnyRef, null)) {
- c.prefix.splice.delegate.traceEntry(message.splice) // TODO should not do ifEnabled check
- } else {
- null
- }
- )
-
- def traceExit(c: LoggerContext)(): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit()
- )
-
- def traceExitResult[R: c.WeakTypeTag](c: LoggerContext)(result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(result.splice)
- )
-
- def traceExitEntryMessage(c: LoggerContext)(entryMessage: c.Expr[EntryMessage]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(entryMessage.splice)
- )
-
- def traceExitEntryMessageResult[R: c.WeakTypeTag](c: LoggerContext)(entryMessage: c.Expr[EntryMessage], result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(entryMessage.splice, result.splice)
- )
-
- def traceExitMessageResult[R: c.WeakTypeTag](c: LoggerContext)(message: c.Expr[Message], result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- {
- if (message.splice != null && c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, message.splice, null)) {
- c.prefix.splice.delegate.traceExit(message.splice, result.splice) // TODO should not do ifEnabled check
- }
- result.splice
- }
- )
-
- def throwing[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(t: c.Expr[T]): c.Expr[T] =
- c.universe.reify(
- c.prefix.splice.delegate.throwing(t.splice)
- )
-
- def throwingLevel[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(level: c.Expr[Level], t: c.Expr[T]): c.Expr[T] =
- c.universe.reify(
- c.prefix.splice.delegate.throwing(level.splice, t.splice)
- )
-
- def catching(c: LoggerContext)(t: c.Expr[Throwable]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.catching(t.splice)
- )
-
- def catchingLevel(c: LoggerContext)(level: c.Expr[Level], t: c.Expr[Throwable]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.catching(level.splice, t.splice)
- )
-
-}
[38/50] [abbrv] logging-log4j-scala git commit: Fix grammatical error
Posted by ma...@apache.org.
Fix grammatical error
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/011bef8f
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/011bef8f
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/011bef8f
Branch: refs/heads/master
Commit: 011bef8fcfb87bed96853aabb97c35bc83979bb9
Parents: 4e87e1f
Author: Matt Sicker <bo...@gmail.com>
Authored: Sun Apr 1 13:43:44 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sun Apr 1 13:43:44 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/index.adoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/011bef8f/src/asciidoctor/index.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/index.adoc b/src/asciidoctor/index.adoc
index 4ded4de..41239dc 100644
--- a/src/asciidoctor/index.adoc
+++ b/src/asciidoctor/index.adoc
@@ -18,7 +18,7 @@
:toc: left
Log4j Scala API is a https://www.scala-lang.org/[Scala] logging facade based on https://logging.apache.org/log4j/2.x/[Log4j 2].
-Support for Scala versions 2.10, 2.11, and 2.12 are provided, and experimental support for pre-release versions of 2.13 is also provided.
+Support for Scala versions 2.10, 2.11, and 2.12 is provided, and experimental support for pre-release versions of 2.13 is also provided.
Log4j Scala API uses Log4j 2.x as its logging backend by default, but this can also be replaced with compatible libraries (e.g., https://logback.qos.ch/[Logback]).
While this library is not required to use Log4j API in Scala, it does provide idiomatic Scala APIs which are friendlier to use in Scala programs than the Java APIs.
[45/50] [abbrv] logging-log4j-scala git commit: Remove obsolete files
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/css/site.css
----------------------------------------------------------------------
diff --git a/src/site/resources/css/site.css b/src/site/resources/css/site.css
deleted file mode 100644
index 5827e44..0000000
--- a/src/site/resources/css/site.css
+++ /dev/null
@@ -1,95 +0,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.
-*/
-
-div.clear { clear:both; visibility: hidden; }
-div.clear hr { display: none; }
-
-/* Tweaks to the bootstrap theme
---------------------------------- */
-li { line-height: 20px; }
-tt { font: 12px Menlo, Monaco, "Courier New", monospace; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; padding: 3px 4px; background-color: #f7f7f9; border: 1px solid #e1e1e8; }
-tt, code { color: #4e648e }
-dt { margin: 15px 0 5px 0; font-size: 1.2em }
-
-.big-red { font-weight: bold; color: #D14 }
-.big-green { font-weight: bold; color: green }
-
-.layout-table { width: 100%; }
-.sidebar { width: 250px; vertical-align: top; }
-.content { padding-left: 20px; vertical-align: top; }
-
-.sidebar-nav { padding: 9px 0; }
-
-.logo-left { margin: 10px; float: left }
-.logo-right { margin: 5px; float: right; height: 100px }
-
-.navbar .nav { margin-left: 40px; }
-
-.nav-list { margin-bottom: 15px; }
-.nav-list li { line-height: 16px; }
-.nav-list li.nav-header { color: #333; }
-.nav-list li.nav-header i { margin-right: 5px; }
-
-.nav-list li a { background: no-repeat 16px 9px; padding-left: 34px; }
-.nav-list li.collapsed > a { background-image: url(../images/collapsed.gif) }
-.nav-list li.expanded > a { background-image: url(../images/expanded.gif) }
-
-.nav-list li.expanded ul { list-style: none; margin-left: 0; }
-.nav-list li.expanded li a { display: block; padding: 3px 15px 3px 45px; margin-left: -15px; margin-right: -15px; }
-.nav-list li.expanded li a:hover { text-decoration: none; background-color: #eee; }
-.nav-list li.expanded li.active a { background-color: #08C; color: white }
-
-.nav.nav-tabs { margin-bottom: 8px; }
-
-.content .section { margin-top: 20px; }
-.content .section:first-child { margin-top: 0; }
-.section h2 { margin-bottom: 10px; }
-.section h3 { margin-bottom: 10px; }
-.section h4 { margin-bottom: 10px; }
-
-.footer { background-color: whitesmoke; padding: 15px; margin-top: 15px; text-align: center; border-top: 1px solid #eee; }
-.footer p { font-size: 12px; margin: 0 }
-
-.table-not-wide { width: inherit;}
-.alert-heading { display: block; font-size: 14px; margin-bottom: 6px; font-weight: bold; }
-
-/* Pretty printing styles. Used with prettify.js.
----------------------------------------------------- */
-.com { color: #93a1a1; }
-.lit { color: #195f91; }
-.pun, .opn, .clo { color: #93a1a1; }
-.fun { color: #dc322f; }
-.str, .atv { color: #D14; }
-.kwd, .linenums .tag { color: #1e347b; }
-.typ, .atn, .dec, .var { color: teal; }
-.pln { color: #48484c; }
-.prettyprint { padding: 8px; background-color: #f7f7f9; border: 1px solid #e1e1e8; }
-.prettyprint.linenums {
- -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
- -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
- box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
-}
-ol.linenums { margin: 0 0 0 33px; }
-ol.linenums li { padding-left: 12px; color: #bebec5; line-height: 18px; text-shadow: 0 1px 0 #fff; }
-
-/* Additional styles.
------------------------*/
-
-/* fixed width font links (e.g., to a JavaDoc page) */
-a.javadoc, a.javadoc:hover {
- font: 12px Menlo, Monaco, "Courier New", monospace;
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/images/collapsed.gif
----------------------------------------------------------------------
diff --git a/src/site/resources/images/collapsed.gif b/src/site/resources/images/collapsed.gif
deleted file mode 100644
index f2509c9..0000000
Binary files a/src/site/resources/images/collapsed.gif and /dev/null differ
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/images/expanded.gif
----------------------------------------------------------------------
diff --git a/src/site/resources/images/expanded.gif b/src/site/resources/images/expanded.gif
deleted file mode 100644
index 02b7462..0000000
Binary files a/src/site/resources/images/expanded.gif and /dev/null differ
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/images/logo.png
----------------------------------------------------------------------
diff --git a/src/site/resources/images/logo.png b/src/site/resources/images/logo.png
deleted file mode 100644
index 1ad7f67..0000000
Binary files a/src/site/resources/images/logo.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/images/ls-logo.jpg
----------------------------------------------------------------------
diff --git a/src/site/resources/images/ls-logo.jpg b/src/site/resources/images/ls-logo.jpg
deleted file mode 100755
index 35f2f47..0000000
Binary files a/src/site/resources/images/ls-logo.jpg and /dev/null differ
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/images/maven-feather.png
----------------------------------------------------------------------
diff --git a/src/site/resources/images/maven-feather.png b/src/site/resources/images/maven-feather.png
deleted file mode 100644
index b5ada83..0000000
Binary files a/src/site/resources/images/maven-feather.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/img/glyphicons-halflings-white.png
----------------------------------------------------------------------
diff --git a/src/site/resources/img/glyphicons-halflings-white.png b/src/site/resources/img/glyphicons-halflings-white.png
deleted file mode 100644
index 3bf6484..0000000
Binary files a/src/site/resources/img/glyphicons-halflings-white.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/img/glyphicons-halflings.png
----------------------------------------------------------------------
diff --git a/src/site/resources/img/glyphicons-halflings.png b/src/site/resources/img/glyphicons-halflings.png
deleted file mode 100644
index a996999..0000000
Binary files a/src/site/resources/img/glyphicons-halflings.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/js/bootstrap.min.js
----------------------------------------------------------------------
diff --git a/src/site/resources/js/bootstrap.min.js b/src/site/resources/js/bootstrap.min.js
deleted file mode 100644
index 66e887b..0000000
--- a/src/site/resources/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-* Bootstrap.js by @fat & @mdo
-* Copyright 2012 Twitter, Inc.
-* http://www.apache.org/licenses/LICENSE-2.0.txt
-*/
-!function(e){e(function(){"use strict";e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()},e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),type
of t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e(function(){e("body").on("click.alert.data-api",t,n.prototype.close)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.parent('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")},e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e(function(){e("body")
.on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=n,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},to:function(t){var n=this.$element.find(".item.active"),r=n.parent().children(),i=r.index(n),s=this;if(t>r.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){s.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",e(r[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.su
pport.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f=e.Event("slide",{relatedTarget:i[0]});this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u]();if(i.hasClass("active"))return;if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.ad
dClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}},e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e(function(){e("body").on("click.carousel.data-api","[data-slide]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=!i.data("modal")&&e.extend({},i.data(),n.data());i.carousel(s),t.preventDefault()})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=th
is.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning)return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning)return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPr
evented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=typeof n=="object"&&n;i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e(function(){e("body").on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})})}(window.jQuery),!function(e){"use strict";function r(){i(e(t)).removeClass("open")}function i(t){var n=t.attr("data-target"),r;return n||(n=t.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,"
")),r=e(n),r.length||(r=t.parent()),r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||(s.toggleClass("open"),n.focus()),!1},keydown:function(t){var n,r,s,o,u,a;if(!/(38|40|27)/.test(t.keyCode))return;n=e(this),t.preventDefault(),t.stopPropagation();if(n.is(".disabled, :disabled"))return;o=i(n),u=o.hasClass("open");if(!u||u&&t.keyCode==27)return n.click();r=e("[role=menu] li:not(.divider) a",o);if(!r.length)return;a=r.index(r.filter(":focus")),t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<r.length-1&&a++,~a||(a=0),r.eq(a).focus()}},e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor
=n,e(function(){e("html").on("click.dropdown.data-api touchstart.dropdown.data-api",r),e("body").on("click.dropdown touchstart.dropdown.data-api",".dropdown",function(e){e.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api touchstart.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;e("body").addClass("modal-open"),this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.paren
t().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1).focus(),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.trigger("shown")}):t.$element.trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,e("body").removeClass("modal-open"),this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$ele
ment.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(e){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,e.proxy(this.rem
oveBackdrop,this)):this.removeBackdrop()):t&&t()}},e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e(function(){e("body").on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,this.options.trigger=="click"?this.$element.on("click."+this.type,this.options.selector,
e.proxy(this.toggle,this)):this.options.trigger!="manual"&&(i=this.options.trigger=="hover"?"mouseenter":"focus",s=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this))),this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,t,this.$element.data()),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(t
his.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var e,t,n,r,i,s,o;if(this.hasContent()&&this.enabled){e=this.tip(),this.setContent(),this.options.animation&&e.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,t=/in/.test(s),e.remove().css({top:0,left:0,display:"block"}).appendTo(t?this.$element:document.body),n=this.getPosition(t),r=e[0].offsetWidth,i=e[0].offsetHeight;switch(t?s.split(" ")[1]:s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}e.css(o).addClass(s).addClass("in")}},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-
inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function r(){var t=setTimeout(function(){n.off(e.support.transition.end).remove()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.remove()})}var t=this,n=this.tip();return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?r():n.remove(),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(t){return e.extend({},t?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},v
alidate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}},e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0,html:!0}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this
.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content > *")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-content")||(typeof n.content=="function"?n.content.call(t[0]):n.content),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}}),e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="p
opover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var t=e(this),n=t.data("target")||t.attr("href"),r=/^#\w/.test(n)&&e(n);return r&&r.length&&[[r.position().top,n]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this
.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}},e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructo
r:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active a").last()[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}},e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})}
,e.fn.tab.Constructor=t,e(function(){e("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=e(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:t.top+t.height,left:t.left}),this.$menu.show(),this.shown=!0,this},h
ide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map
(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),(e.browser.webkit||e.browser.msie)&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this))},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagati
on()},keydown:function(t){this.suppressKeyPressRepeat=!~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},blur:function(e){var t=this;setTimeout(function(){t.hide()},150)},click:function(e){e.stopPropagation(),e.preventDefault(),this.select()},mouseenter:function(t){this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")}},e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Const
ructor=t,e(function(){e("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;t.preventDefault(),n.typeahead(n.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affi
x"+(a?"-"+a:""))},e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
\ No newline at end of file
[40/50] [abbrv] logging-log4j-scala git commit: LOG4J2-2295: Add OSGi
metadata to release jars
Posted by ma...@apache.org.
LOG4J2-2295: Add OSGi metadata to release jars
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/59f47b87
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/59f47b87
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/59f47b87
Branch: refs/heads/master
Commit: 59f47b878d1a80978653e2b790d581717a180afc
Parents: 798a5cb
Author: Matt Sicker <bo...@gmail.com>
Authored: Mon Apr 2 10:56:50 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Mon Apr 2 10:56:50 2018 -0500
----------------------------------------------------------------------
build.sbt | 14 +++++++-------
project/plugins.sbt | 2 +-
src/asciidoctor/changes.adoc | 1 +
3 files changed, 9 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/59f47b87/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index b91cbb0..5bb6b15 100644
--- a/build.sbt
+++ b/build.sbt
@@ -15,7 +15,7 @@
* limitations under the license.
*/
import Dependencies._
-//import OsgiKeys._
+import OsgiKeys._
enablePlugins(org.apache.logging.log4j.scala.sbt.copyresources.CopyResourcesPlugin)
@@ -108,10 +108,10 @@ lazy val apiDependencies = Seq(
)
)
-//lazy val bundleSettings = osgiSettings ++ Seq(
-// bundleSymbolicName := "org.apache.logging.log4j.scala",
-// exportPackage := Seq("org.apache.logging.log4j.scala")
-//)
+lazy val bundleSettings = osgiSettings ++ Seq(
+ bundleSymbolicName := "org.apache.logging.log4j.scala",
+ exportPackage := Seq("org.apache.logging.log4j.scala")
+)
lazy val root = (project in file("."))
.settings(name := "log4j-api-scala")
@@ -124,8 +124,8 @@ lazy val root = (project in file("."))
.settings(apiDependencies: _*)
.enablePlugins(AsciidoctorPlugin)
.enablePlugins(SiteScaladocPlugin)
-// .enablePlugins(SbtOsgi)
-// .settings(bundleSettings: _*)
+ .enablePlugins(SbtOsgi)
+ .settings(bundleSettings: _*)
//lazy val nopublish = Seq(
// publish := {},
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/59f47b87/project/plugins.sbt
----------------------------------------------------------------------
diff --git a/project/plugins.sbt b/project/plugins.sbt
index e50648c..2701fb5 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -19,5 +19,5 @@ addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.8")
addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.3.2")
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.0")
-//addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.9.3")
+addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.9.3")
addSbtPlugin("org.musigma" % "sbt-rat" % "0.2")
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/59f47b87/src/asciidoctor/changes.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/changes.adoc b/src/asciidoctor/changes.adoc
index 748b0e9..fabd482 100644
--- a/src/asciidoctor/changes.adoc
+++ b/src/asciidoctor/changes.adoc
@@ -21,6 +21,7 @@
[vertical]
New Features::
[horizontal]
+LOG4J2-2295::: Add OSGi metadata to release jars.
LOG4J2-2294::: Add release audit information to build.
LOG4J2-2298::: Add changelog to site.
LOG4J2-2293::: Add required license files to SBT output artifacts.
[14/50] [abbrv] logging-log4j-scala git commit: Add missing license
headers
Posted by ma...@apache.org.
Add missing license headers
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/814f77d3
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/814f77d3
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/814f77d3
Branch: refs/heads/master
Commit: 814f77d3eab094a24823bab8de6ec22566f232b4
Parents: 47899ea
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 16:01:45 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 16:01:45 2018 -0500
----------------------------------------------------------------------
project/Dependencies.scala | 16 ++++++++++++++++
project/build.properties | 17 +++++++++++++++++
project/plugins.sbt | 16 ++++++++++++++++
version.sbt | 18 +++++++++++++++++-
4 files changed, 66 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/814f77d3/project/Dependencies.scala
----------------------------------------------------------------------
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 0de9510..93b3aff 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -1,3 +1,19 @@
+/*
+ * 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.
+ */
import sbt._
object Dependencies {
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/814f77d3/project/build.properties
----------------------------------------------------------------------
diff --git a/project/build.properties b/project/build.properties
index 31334bb..c604a95 100644
--- a/project/build.properties
+++ b/project/build.properties
@@ -1 +1,18 @@
+#
+# 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.
+#
+
sbt.version=1.1.1
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/814f77d3/project/plugins.sbt
----------------------------------------------------------------------
diff --git a/project/plugins.sbt b/project/plugins.sbt
index df90981..0d7f53e 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -1,3 +1,19 @@
+/*
+ * 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.
+ */
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.1")
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.8")
addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0")
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/814f77d3/version.sbt
----------------------------------------------------------------------
diff --git a/version.sbt b/version.sbt
index 45d87d8..b8bcd26 100644
--- a/version.sbt
+++ b/version.sbt
@@ -1 +1,17 @@
-version in ThisBuild := "12.0-SNAPSHOT"
\ No newline at end of file
+/*
+ * 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.
+ */
+version in ThisBuild := "12.0-SNAPSHOT"
[36/50] [abbrv] logging-log4j-scala git commit: Fix typo
Posted by ma...@apache.org.
Fix typo
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/8ef7ea21
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/8ef7ea21
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/8ef7ea21
Branch: refs/heads/master
Commit: 8ef7ea212e95137b72b40279ee75f2501174082d
Parents: d9a1f89
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 22:15:29 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 22:15:29 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/download.adoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/8ef7ea21/src/asciidoctor/download.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/download.adoc b/src/asciidoctor/download.adoc
index 2d11fc9..083c980 100644
--- a/src/asciidoctor/download.adoc
+++ b/src/asciidoctor/download.adoc
@@ -36,7 +36,7 @@ The checksum and signature are links to the originals on the main distribution s
|https://www.apache.org/dyn/closer.lua/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-src.tar.gz[apache-log4j-scala-{project-version}-src.tar.gz]
|https://www.apache.org/dist/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-src.tar.gz.asc[apache-log4j-scala-{project-version}-src.tar.gz.asc]
-|Apache Log4j Scala API binary (zip)
+|Apache Log4j Scala API source (zip)
|https://www.apache.org/dyn/closer.lua/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-src.zip[apache-log4j-scala-{project-version}-src.zip]
|https://www.apache.org/dist/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-src.zip.asc[apache-log4j-scala-{project-version}-src.zip.asc]
|===
[20/50] [abbrv] logging-log4j-scala git commit: Improve types
Posted by ma...@apache.org.
Improve types
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/f0784dac
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/f0784dac
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/f0784dac
Branch: refs/heads/master
Commit: f0784daca2104a6e5a99c8764e119bf2e0430ba6
Parents: d8be038
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 17:49:18 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 17:49:18 2018 -0500
----------------------------------------------------------------------
project/CopyResourcesPlugin.scala | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/f0784dac/project/CopyResourcesPlugin.scala
----------------------------------------------------------------------
diff --git a/project/CopyResourcesPlugin.scala b/project/CopyResourcesPlugin.scala
index 32b6104..1f62257 100644
--- a/project/CopyResourcesPlugin.scala
+++ b/project/CopyResourcesPlugin.scala
@@ -31,13 +31,13 @@ object CopyResourcesPlugin extends AutoPlugin {
extraResources := Nil
) ++ addExtraResourcesInAll(Compile)(packageBin, packageSrc, packageDoc)
- def addExtraResourcesIn(configuration: Configuration, scope: Scoped): Setting[Task[Seq[(File, String)]]] =
- mappings in (configuration, scope) ++= extraResources.value
+ def addExtraResourcesIn(configuration: Configuration, task: ScopedTaskable[File]): Setting[Task[Seq[(File, String)]]] =
+ mappings in (configuration, task) ++= extraResources.value
- def addExtraResourcesInAll(configurations: Configuration*)(scopes: Scoped*): Seq[Setting[Task[Seq[(File, String)]]]] =
+ def addExtraResourcesInAll(configurations: Configuration*)(tasks: ScopedTaskable[File]*): Seq[Setting[Task[Seq[(File, String)]]]] =
for {
configuration <- configurations
- scope <- scopes
+ scope <- tasks
} yield addExtraResourcesIn(configuration, scope)
}
[30/50] [abbrv] logging-log4j-scala git commit: Add changelog entry
Posted by ma...@apache.org.
Add changelog entry
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/e665ddfb
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/e665ddfb
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/e665ddfb
Branch: refs/heads/master
Commit: e665ddfbeed6ffcf10d47cdef3e48c8b773f41a1
Parents: 6cb937c
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 19:55:49 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 19:55:49 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/changes.adoc | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/e665ddfb/src/asciidoctor/changes.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/changes.adoc b/src/asciidoctor/changes.adoc
index 890263a..748b0e9 100644
--- a/src/asciidoctor/changes.adoc
+++ b/src/asciidoctor/changes.adoc
@@ -21,6 +21,7 @@
[vertical]
New Features::
[horizontal]
+LOG4J2-2294::: Add release audit information to build.
LOG4J2-2298::: Add changelog to site.
LOG4J2-2293::: Add required license files to SBT output artifacts.
LOG4J2-2296::: Add sbt-site plugin and website configuration.
[29/50] [abbrv] logging-log4j-scala git commit: Add download page
Posted by ma...@apache.org.
Add download page
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/6cb937c2
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/6cb937c2
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/6cb937c2
Branch: refs/heads/master
Commit: 6cb937c2d622b88a0c9c0de08b33912196259a72
Parents: a42494a
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 19:54:36 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 19:54:36 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/download.adoc | 74 ++++++++++++++++++++++++++++++++++++++
src/asciidoctor/index.adoc | 5 ++-
src/asciidoctor/usage.adoc | 11 ------
3 files changed, 78 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/6cb937c2/src/asciidoctor/download.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/download.adoc b/src/asciidoctor/download.adoc
new file mode 100644
index 0000000..2d11fc9
--- /dev/null
+++ b/src/asciidoctor/download.adoc
@@ -0,0 +1,74 @@
+////
+ 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.
+////
+== Download
+
+Apache Log4j Scala API is distributed under the https://www.apache.org/licenses/LICENSE-2.0.html[Apache License, version 2.0].
+The link in the Mirrors column should display a list of available mirrors with a default selection based on your inferred location.
+If you do not see that page, try a different browser.
+The checksum and signature are links to the originals on the main distribution server.
+
+|===
+|Distribution |Mirrors |Signature
+
+|Apache Log4j Scala API binary (tar.gz)
+|https://www.apache.org/dyn/closer.lua/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-bin.tar.gz[apache-log4j-scala-{project-version}-bin.tar.gz]
+|https://www.apache.org/dist/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-bin.tar.gz.asc[apache-log4j-scala-{project-version}-bin.tar.gz.asc]
+
+|Apache Log4j Scala API binary (zip)
+|https://www.apache.org/dyn/closer.lua/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-bin.zip[apache-log4j-scala-{project-version}-bin.zip]
+|https://www.apache.org/dist/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-bin.zip.asc[apache-log4j-scala-{project-version}-bin.zip.asc]
+
+|Apache Log4j Scala API source (tar.gz)
+|https://www.apache.org/dyn/closer.lua/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-src.tar.gz[apache-log4j-scala-{project-version}-src.tar.gz]
+|https://www.apache.org/dist/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-src.tar.gz.asc[apache-log4j-scala-{project-version}-src.tar.gz.asc]
+
+|Apache Log4j Scala API binary (zip)
+|https://www.apache.org/dyn/closer.lua/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-src.zip[apache-log4j-scala-{project-version}-src.zip]
+|https://www.apache.org/dist/logging/log4j/scala/{project-version}/apache-log4j-scala-{project-version}-src.zip.asc[apache-log4j-scala-{project-version}-src.zip.asc]
+|===
+
+It is essential that you verify the integrity of the downloaded files using the PGP or MD5 signatures.
+Please read https://httpd.apache.org/dev/verification.html[Verifying Apache HTTP Server Releases] for more information on why you should verify our releases.
+
+The PGP signatures can be verified using PGP or GPG.
+First download the https://www.apache.org/dist/logging/KEYS[KEYS] as well as the asc signature file for the relevant distribution.
+Make sure you get these files from the https://www.apache.org/dist/logging/[main distribution directory], rather than from a mirror.
+Then verify the signatures using:
+
+[source,bash,subs=attributes]
+----
+gpg --import KEYS
+gpg --verify apache-log4j-scala-{project-version}-bin.tar.gz.asc apache-log4j-scala-{project-version}-bin.tar.gz
+gpg --verify apache-log4j-scala-{project-version}-bin.zip.asc apache-log4j-scala-{project-version}-bin.zip
+gpg --verify apache-log4j-scala-{project-version}-src.tar.gz.asc apache-log4j-scala-{project-version}-src.tar.gz
+gpg --verify apache-log4j-scala-{project-version}-src.zip.asc apache-log4j-scala-{project-version}-src.zip
+----
+
+Log4j Scala API requires https://logging.apache.org/log4j/2.x/download.html[Log4j API].
+
+=== Using SBT
+
+How to add Log4j Scala API to your project using Log4j 2:
+
+.build.sbt
+[source,scala,subs=attributes]
+----
+libraryDependencies ++= Seq(
+ "org.apache.logging.log4j" %% "log4j-api-scala" % "{project-version}",
+ "org.apache.logging.log4j" % "log4j-core" % "2.11.0" % Runtime
+)
+----
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/6cb937c2/src/asciidoctor/index.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/index.adoc b/src/asciidoctor/index.adoc
index 913809b..6eccdfb 100644
--- a/src/asciidoctor/index.adoc
+++ b/src/asciidoctor/index.adoc
@@ -24,12 +24,15 @@ While this library is not required to use Log4j API in Scala, it does provide id
include::usage.adoc[]
+include::download.adoc[]
+
include::changes.adoc[]
+include::build.adoc[]
+
////
TODO:
* Apache logo
-* Downloads page
* License report
* ScalaDocs links
* Project links
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/6cb937c2/src/asciidoctor/usage.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/usage.adoc b/src/asciidoctor/usage.adoc
index 9300963..cc65bad 100644
--- a/src/asciidoctor/usage.adoc
+++ b/src/asciidoctor/usage.adoc
@@ -16,17 +16,6 @@
////
== Usage
-Log4j Scala API requires Log4j API. An example SBT dependency setup:
-
-.build.sbt
-[source,scala,subs=attributes]
-----
-libraryDependencies ++= Seq(
- "org.apache.logging.log4j" %% "log4j-api-scala" % "{project-version}",
- "org.apache.logging.log4j" % "log4j-api" % "2.11.0",
- "org.apache.logging.log4j" % "log4j-core" % "2.11.0" % Runtime)
-----
-
Using the Scala API is as simple as mixing in the `Logging` trait to your class. Example:
[source,scala]
[31/50] [abbrv] logging-log4j-scala git commit: Add ScalaDoc links
Posted by ma...@apache.org.
Add ScalaDoc links
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/a5726dee
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/a5726dee
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/a5726dee
Branch: refs/heads/master
Commit: a5726deeff75b0e1adcd4f0557003726341aab8d
Parents: e665ddf
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 20:03:08 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 20:03:08 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/index.adoc | 1 -
src/asciidoctor/usage.adoc | 15 +++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/a5726dee/src/asciidoctor/index.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/index.adoc b/src/asciidoctor/index.adoc
index 6eccdfb..01ef6ce 100644
--- a/src/asciidoctor/index.adoc
+++ b/src/asciidoctor/index.adoc
@@ -34,7 +34,6 @@ include::build.adoc[]
TODO:
* Apache logo
* License report
-* ScalaDocs links
* Project links
* Dependency report
////
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/a5726dee/src/asciidoctor/usage.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/usage.adoc b/src/asciidoctor/usage.adoc
index cc65bad..93381a4 100644
--- a/src/asciidoctor/usage.adoc
+++ b/src/asciidoctor/usage.adoc
@@ -36,6 +36,21 @@ class MyClass extends BaseClass with Logging {
}
----
+=== API Documentation
+
+|===
+|Scala Version |API Link
+
+|Scala 2.10
+|https://logging.apache.org/log4j/scala/log4j-api-scala_2.10/scaladocs/[ScalaDocs]
+
+|Scala 2.11
+|https://logging.apache.org/log4j/scala/log4j-api-scala_2.11/scaladocs/[ScalaDocs]
+
+|Scala 2.12
+|https://logging.apache.org/log4j/scala/log4j-api-scala_2.12/scaladocs/[ScalaDocs]
+|===
+
== Configuration
Log4j Scala API uses https://logging.apache.org/log4j/2.x/manual/configuration.html[Log4j configuration] by default.
[47/50] [abbrv] logging-log4j-scala git commit: Remove obsolete files
Posted by ma...@apache.org.
Remove obsolete files
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/be2e32be
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/be2e32be
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/be2e32be
Branch: refs/heads/master
Commit: be2e32be63fbcd47e4650f5c18068d591601a0eb
Parents: 2080b51
Author: Matt Sicker <bo...@gmail.com>
Authored: Mon Apr 2 16:24:09 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Mon Apr 2 16:24:09 2018 -0500
----------------------------------------------------------------------
pom.xml | 207 --------
src/site/resources/css/bootstrap.min.css | 9 -
src/site/resources/css/site.css | 95 ----
src/site/resources/images/collapsed.gif | Bin 820 -> 0 bytes
src/site/resources/images/expanded.gif | Bin 52 -> 0 bytes
src/site/resources/images/logo.png | Bin 31853 -> 0 bytes
src/site/resources/images/ls-logo.jpg | Bin 41915 -> 0 bytes
src/site/resources/images/maven-feather.png | Bin 3330 -> 0 bytes
.../img/glyphicons-halflings-white.png | Bin 8777 -> 0 bytes
src/site/resources/img/glyphicons-halflings.png | Bin 12799 -> 0 bytes
src/site/resources/js/bootstrap.min.js | 6 -
src/site/resources/js/jquery.min.js | 4 -
src/site/resources/js/prettify.min.js | 41 --
src/site/resources/js/site.js | 106 ----
src/site/site.vm | 515 -------------------
src/site/site.xml | 30 --
16 files changed, 1013 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index c26cc7a..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-<?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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.logging</groupId>
- <artifactId>logging-parent</artifactId>
- <version>1</version>
- </parent>
-
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-scala</artifactId>
- <version>12.0-SNAPSHOT</version>
- <packaging>pom</packaging>
-
- <prerequisites>
- <maven>3.0.5</maven>
- </prerequisites>
-
- <name>Apache Log4j 2 Scala API</name>
- <description>Apache Log4j 2 Scala API</description>
- <url>http://logging.apache.org/log4j/2.x/</url>
-
- <scm>
- <connection>scm:git:http://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git</connection>
- <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git</developerConnection>
- <url>https://git-wip-us.apache.org/repos/asf?p=logging-log4j-scala.git;a=summary</url>
- <tag>log4j-scala-${Log4jScalaApiReleaseVersion}</tag>
- </scm>
-
- <properties>
- <maven-site-plugin.version>3.6</maven-site-plugin.version>
- <log4jParentDir>${basedir}</log4jParentDir>
- <Log4jScalaApiReleaseVersion>11.0</Log4jScalaApiReleaseVersion>
- <log4j.version>2.9.1</log4j.version>
- <changes.plugin.version>2.12.1</changes.plugin.version>
- <pmd.plugin.version>3.8</pmd.plugin.version>
- </properties>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.10</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.11</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.12</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- <version>${log4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- <version>${log4j.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <version>${log4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <version>${log4j.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <modules>
- <module>log4j-api-scala_2.10</module>
- <module>log4j-api-scala_2.11</module>
- <module>log4j-api-scala_2.12</module>
-<!--<module>log4j-api-scala_2.13</module> -->
- <module>log4j-api-scala-sample</module>
- </modules>
-
- <build>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-site-plugin</artifactId>
- <version>${maven-site-plugin.version}</version>
- <configuration>
- <locales>en</locales>
- <templateFile>${log4jParentDir}/src/site/site.vm</templateFile>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>3.3.0</version>
- <inherited>true</inherited>
- <extensions>true</extensions>
- <executions>
- <execution>
- <goals>
- <goal>manifest</goal>
- </goals>
- <phase>process-classes</phase>
- </execution>
- </executions>
- </plugin>
- <!-- RAT report -->
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <version>0.12</version>
- <configuration>
- <excludes>
- <!-- README does not need a license header -->
- <exclude>README.md</exclude>
- <!-- jQuery is MIT-licensed, but RAT can't figure it out -->
- <exclude>src/site/resources/js/jquery.js</exclude>
- <exclude>src/site/resources/js/jquery.min.js</exclude>
- <!-- Generated files -->
- <exclude>log4j-distribution/target/**/*</exclude>
- <exclude>log4j-distribution/.project</exclude>
- <exclude>log4j-distribution/.settings/**</exclude>
- <exclude>velocity.log</exclude>
- <!-- Other -->
- <exclude>felix-cache/**</exclude>
- <exclude>RELEASE-NOTES.md</exclude>
- </excludes>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-site-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- <distributionManagement>
- <downloadUrl>https://logging.apache.org/log4j/2.x/download.html</downloadUrl>
- <!-- site is only included to make maven-site-plugin stop complaining -->
- <site>
- <id>www.example.com</id>
- <url>scp://www.example.com/www/docs/project/</url>
- </site>
- </distributionManagement>
-
- <profiles>
- <profile>
- <id>apache-release</id>
- <modules>
- <module>log4j-scala-distribution</module>
- </modules>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>3.1.0</version>
- <executions>
- <execution>
- <id>source-release-assembly</id>
- <configuration>
- <skipAssembly>true</skipAssembly>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
-
-</project>
[03/50] [abbrv] logging-log4j-scala git commit: Reorganize api module
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/api/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala
----------------------------------------------------------------------
diff --git a/api/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala b/api/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala
deleted file mode 100644
index bd12742..0000000
--- a/api/src/test/scala/org/apache/logging/log4j/scala/LoggerTest.scala
+++ /dev/null
@@ -1,552 +0,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.
- */
-package org.apache.logging.log4j.scala
-
-import org.apache.logging.log4j.message.{DefaultFlowMessageFactory, Message, ParameterizedMessage, ParameterizedMessageFactory}
-import org.apache.logging.log4j.spi.{AbstractLogger, ExtendedLogger}
-import org.apache.logging.log4j.{Level, Marker, MarkerManager}
-import org.junit.runner.RunWith
-import org.mockito.Matchers.{any, anyString, eq => eqv}
-import org.mockito.Mockito._
-import org.scalatest.junit.JUnitRunner
-import org.scalatest.mockito.MockitoSugar
-import org.scalatest.{FunSuite, Matchers}
-
-import scala.language.reflectiveCalls // needed for Mockito mocking
-
-case class Custom(i: Int)
-
-trait Manager {
- def fetchValue(): Int
-}
-
-@RunWith(classOf[JUnitRunner])
-class LoggerTest extends FunSuite with Matchers with MockitoSugar {
-
- val msg = new ParameterizedMessage("msg {}", 17)
- val entryMsg = new DefaultFlowMessageFactory().newEntryMessage(msg)
- val cseqMsg: CharSequence = new StringBuilder().append("cseq msg")
- val objectMsg = Custom(17)
- val cause = new RuntimeException("cause")
- val marker = MarkerManager.getMarker("marker")
- val result = "foo"
-
- def fixture =
- new {
- val mockLogger = {
- val mockLogger = mock[ExtendedLogger]
- when(mockLogger.getMessageFactory).thenReturn(new ParameterizedMessageFactory)
- mockLogger
- }
- val manager = {
- val mockManager = mock[Manager]
- when(mockManager.fetchValue()).thenReturn(4711)
- mockManager
- }
- }
-
- test("fatal enabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.FATAL)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.fatal(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.FATAL), eqv(null), any[Message], eqv(null))
- verify(f.manager).fetchValue()
- }
-
- test("fatal disabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.FATAL)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.fatal(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("error enabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.ERROR)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.error(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.ERROR), eqv(null), any[Message], eqv(null))
- verify(f.manager).fetchValue()
- }
-
- test("error disabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.ERROR)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.error(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("warn enabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.WARN)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.warn(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.WARN), eqv(null), any[Message], eqv(null))
- verify(f.manager).fetchValue()
- }
-
- test("warn disabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.WARN)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.warn(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("info enabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.info(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(null))
- verify(f.manager).fetchValue()
- }
-
- test("info disabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.info(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("debug enabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.DEBUG)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.debug(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.DEBUG), eqv(null), any[Message], eqv(null))
- verify(f.manager).fetchValue()
- }
-
- test("debug disabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.DEBUG)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.debug(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("trace enabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.trace(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.TRACE), eqv(null), any[Message], eqv(null))
- verify(f.manager).fetchValue()
- }
-
- test("trace disabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.trace(s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
-
- test("log enabled with Message message and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, msg)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), eqv(msg), eqv(null))
- }
-
- test("log disabled with Message message and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, msg)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with String message and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(null))
- verify(f.manager).fetchValue()
- }
-
- test("log disabled with String message and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("log enabled with CharSequence message and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, cseqMsg)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(null))
- }
-
- test("log disabled with CharSequence message and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, cseqMsg)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with Object message and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, objectMsg)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(null))
- }
-
- test("log disabled with Object message and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, objectMsg)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with Message message and cause and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, msg, cause)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), eqv(msg), eqv(cause))
- }
-
- test("log disabled with Message message and cause and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, msg, cause)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with String message and cause and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, s"string msg with value: ${f.manager.fetchValue()}", cause)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(cause))
- verify(f.manager).fetchValue()
- }
-
- test("log disabled with String message and cause and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, s"string msg with value: ${f.manager.fetchValue()}", cause)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("log enabled with CharSequence message and cause and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, cseqMsg, cause)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(cause))
- }
-
- test("log disabled with CharSequence message and cause and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, cseqMsg, cause)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with Object message and cause and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, objectMsg, cause)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(marker), any[Message], eqv(cause))
- }
-
- test("log disabled with Object message and cause and Marker") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO, marker)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, marker, objectMsg, cause)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with Message message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, msg)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), eqv(msg), eqv(null))
- }
-
- test("log disabled with Message message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, msg)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(null))
- verify(f.manager).fetchValue()
- }
-
- test("log disabled with String message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, s"string msg with value: ${f.manager.fetchValue()}")
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("log enabled with CharSequence message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, cseqMsg)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(null))
- }
-
- test("log disabled with CharSequence message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, cseqMsg)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with Object message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, objectMsg)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(null))
- }
-
- test("log disabled with Object message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, objectMsg)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with Message message and cause") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, msg, cause)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), eqv(msg), eqv(cause))
- }
-
- test("log disabled with Message message and cause") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, msg, cause)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with String message and cause") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, s"string msg with value: ${f.manager.fetchValue()}", cause)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(cause))
- verify(f.manager).fetchValue()
- }
-
- test("log disabled with String message and cause") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, s"string msg with value: ${f.manager.fetchValue()}", cause)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- verify(f.manager, never).fetchValue()
- }
-
- test("log enabled with CharSequence message and cause") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, cseqMsg, cause)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(cause))
- }
-
- test("log disabled with CharSequence message and cause") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, cseqMsg, cause)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
- test("log enabled with Object message and cause") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, objectMsg, cause)
- verify(f.mockLogger).logMessage(anyString(), eqv(Level.INFO), eqv(null), any[Message], eqv(cause))
- }
-
- test("log disabled with Object message and cause") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.INFO)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger(Level.INFO, objectMsg, cause)
- verify(f.mockLogger, never).logMessage(anyString(), any[Level], any[Marker], any[Message], any[Throwable])
- }
-
-
- test("traceEntry") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.traceEntry()
- verify(f.mockLogger).traceEntry()
- }
-
- test("traceEntry enabled with params") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.traceEntry("foo", "bar")
- verify(f.mockLogger).traceEntry(null: String, "foo", "bar")
- }
-
- test("traceEntry disabled with params") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.traceEntry("foo", "bar")
- verify(f.mockLogger, never).traceEntry(anyString(), anyString(), anyString())
- }
-
- test("traceEntry enabled with message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.traceEntry(msg)
- verify(f.mockLogger).traceEntry(eqv(msg))
- }
-
- test("traceEntry disabled with message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null.asInstanceOf[AnyRef], null)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.traceEntry(msg)
- verify(f.mockLogger, never).traceEntry(any[Message])
- }
-
- test("traceExit") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.traceExit()
- verify(f.mockLogger).traceExit()
- }
-
- test("traceExit with result") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.traceExit(result)
- verify(f.mockLogger).traceExit(result)
- }
-
- test("traceExit with entrymessage") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.traceExit(entryMsg)
- verify(f.mockLogger).traceExit(entryMsg)
- }
-
- test("traceExit with entrymessage and result") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.traceExit(entryMsg, result)
- verify(f.mockLogger).traceExit(entryMsg, result)
- }
-
- test("traceExit enabled with message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(true)
- val logger = Logger(f.mockLogger)
- logger.traceExit(msg, result)
- verify(f.mockLogger).traceExit(eqv(msg), eqv(result))
- }
-
- test("traceExit disabled with message") {
- val f = fixture
- when(f.mockLogger.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, msg, null)).thenReturn(false)
- val logger = Logger(f.mockLogger)
- logger.traceExit(msg, result)
- verify(f.mockLogger, never).traceExit(any[Message], any[AnyRef])
- }
-
- test("throwing") {
- val f = fixture
- val logger = Logger(f.mockLogger)
- logger.throwing(cause)
- verify(f.mockLogger).throwing(eqv(cause))
- }
-
- test("throwing with level") {
- val f = fixture
- val logger = Logger(f.mockLogger)
- logger.throwing(Level.INFO, cause)
- verify(f.mockLogger).throwing(eqv(Level.INFO), eqv(cause))
- }
-
- test("catching") {
- val f = fixture
- val logger = Logger(f.mockLogger)
- logger.catching(cause)
- verify(f.mockLogger).catching(eqv(cause))
- }
-
- test("catching with level") {
- val f = fixture
- val logger = Logger(f.mockLogger)
- logger.catching(Level.INFO, cause)
- verify(f.mockLogger).catching(eqv(Level.INFO), eqv(cause))
- }
-
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/api/src/test/scala/org/apache/logging/log4j/scala/LoggingContextTest.scala
----------------------------------------------------------------------
diff --git a/api/src/test/scala/org/apache/logging/log4j/scala/LoggingContextTest.scala b/api/src/test/scala/org/apache/logging/log4j/scala/LoggingContextTest.scala
deleted file mode 100644
index 80ca940..0000000
--- a/api/src/test/scala/org/apache/logging/log4j/scala/LoggingContextTest.scala
+++ /dev/null
@@ -1,115 +0,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.
- */
-package org.apache.logging.log4j.scala
-
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-import org.scalatest.{FunSuite, Matchers}
-
-import scala.collection.mutable
-
-@RunWith(classOf[JUnitRunner])
-class LoggingContextTest extends FunSuite with Matchers {
-
- test("put single, contains, get") {
- LoggingContext += "key" -> "value"
-
- LoggingContext.contains("key") shouldBe true
- LoggingContext.get("key") shouldBe Some("value")
- LoggingContext.contains("bogus") shouldBe false
- LoggingContext.get("bogus") shouldBe None
- }
-
- test("put multiple 1") {
- LoggingContext += ("key1" -> "value1", "key2" -> "value2")
-
- LoggingContext.get("key1") shouldBe Some("value1")
- LoggingContext.get("key2") shouldBe Some("value2")
- }
-
- test("put multiple 2") {
- LoggingContext ++= Seq("key1" -> "value1", "key2" -> "value2")
-
- LoggingContext.get("key1") shouldBe Some("value1")
- LoggingContext.get("key2") shouldBe Some("value2")
- }
-
- test("remove single") {
- LoggingContext += ("key1" -> "value1")
- LoggingContext += ("key2" -> "value2")
- LoggingContext += ("key3" -> "value3")
-
- LoggingContext -= "key1"
-
- LoggingContext.get("key1") shouldBe None
- LoggingContext.get("key2") shouldBe Some("value2")
- LoggingContext.get("key3") shouldBe Some("value3")
- }
-
- test("remove multiple 1") {
- LoggingContext += ("key1" -> "value1")
- LoggingContext += ("key2" -> "value2")
- LoggingContext += ("key3" -> "value3")
-
- LoggingContext -= ("key1", "key2")
-
- LoggingContext.get("key1") shouldBe None
- LoggingContext.get("key2") shouldBe None
- LoggingContext.get("key3") shouldBe Some("value3")
- }
-
- test("remove multiple 2") {
- LoggingContext += ("key1" -> "value1")
- LoggingContext += ("key2" -> "value2")
- LoggingContext += ("key3" -> "value3")
-
- LoggingContext --= Seq("key1", "key2")
-
- LoggingContext.get("key1") shouldBe None
- LoggingContext.get("key2") shouldBe None
- LoggingContext.get("key3") shouldBe Some("value3")
- }
-
- test("clear, size, isEmpty") {
- LoggingContext += ("key" -> "value")
-
- LoggingContext.clear()
-
- LoggingContext.contains("key") shouldBe false
- LoggingContext.size shouldBe 0
- LoggingContext.isEmpty shouldBe true
- }
-
- test("iterator") {
- LoggingContext += ("key1" -> "value1")
- LoggingContext += ("key2" -> "value2")
-
- LoggingContext.iterator.toSet shouldBe Set("key1" -> "value1", "key2" -> "value2")
- }
-
- test("foreach") {
- LoggingContext += ("key1" -> "value1")
- LoggingContext += ("key2" -> "value2")
-
- val result = mutable.Set.empty[(String, String)]
-
- LoggingContext.foreach { result += _ }
-
- result shouldBe Set("key1" -> "value1", "key2" -> "value2")
- }
-
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index c95f3d3..5cc1c21 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,64 +1,104 @@
import Dependencies._
-name := "Log4j Scala API"
-organization in ThisBuild := "org.apache.logging.log4j"
-organizationName in ThisBuild := "Apache Software Foundation"
-organizationHomepage in ThisBuild := Some(url("https://www.apache.org/"))
-homepage in ThisBuild := Some(url("https://logging.apache.org/log4j/scala/"))
-licenses in ThisBuild := Seq("Apache License, Version 2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.txt"))
-scmInfo in ThisBuild := Some(ScmInfo(
- url("https://git-wip-us.apache.org/repos/asf?p=logging-log4j-scala.git;a=summary"),
- "scm:git:http://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git",
- "scm:git:https://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git"
-))
+lazy val metadataSettings = Seq(
+ organization := "org.apache.logging.log4j",
+ organizationName := "Apache Software Foundation",
+ organizationHomepage := Some(url("https://www.apache.org/")),
+ homepage := Some(url("https://logging.apache.org/log4j/scala/")),
+ licenses := Seq("Apache License, Version 2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.txt")),
+ scmInfo := Some(ScmInfo(
+ url("https://git-wip-us.apache.org/repos/asf?p=logging-log4j-scala.git;a=summary"),
+ "scm:git:http://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git",
+ "scm:git:https://git-wip-us.apache.org/repos/asf/logging-log4j-scala.git"
+ )),
+ pomExtra := {
+ <parent>
+ <groupId>org.apache.logging</groupId>
+ <artifactId>logging-parent</artifactId>
+ <version>2</version>
+ </parent>
+ <developers>
+ <developer>
+ <id>mikes</id>
+ <name>Mikael Ståldal</name>
+ </developer>
+ <developer>
+ <id>mattsicker</id>
+ <name>Matt Sicker</name>
+ </developer>
+ <developer>
+ <id>ggregory</id>
+ <name>Gary Gregory</name>
+ </developer>
+ </developers>
+ }
+)
-lazy val commonSettings = Seq(
- scalacOptions := Seq("-feature", "-unchecked", "-deprecation")
+lazy val compileSettings = Seq(
+ scalacOptions := Seq("-feature", "-unchecked", "-deprecation"),
+ scalaVersion := scala211,
+ crossScalaVersions := Seq(scala210, scala211, scala212, scala213)
)
lazy val publishSettings = Seq(
publishMavenStyle := true,
publishArtifact in Test := false,
publishTo := {
- if (version.value.endsWith("-SNAPSHOT")) {
+ if (isSnapshot.value) {
Some("Apache Snapshots" at "https://repository.apache.org/content/repositories/snapshots")
} else {
Some("Apache Releases" at "https://repository.apache.org/service/local/staging/deploy/maven2")
}
- }
+ },
+ credentials += Credentials(Path.userHome / ".ivy2" / ".credentials"),
+// managedResources
+// resourceGenerators in Compile += inlineTask(Seq(file("LICENSE.txt"), file("NOTICE.txt")))
)
lazy val releaseSettings = Seq(
releaseCrossBuild := true
)
-lazy val api = (project in file("api"))
- .settings(commonSettings: _*)
+lazy val apiDependencies = Seq(
+ libraryDependencies ++= Seq(
+ "org.scala-lang" % "scala-reflect" % scalaVersion.value,
+ "org.apache.logging.log4j" % "log4j-api" % log4j,
+ "org.apache.logging.log4j" % "log4j-api" % log4j % Test classifier "tests",
+ "junit" % "junit" % junit % Test,
+ "org.scalatest" %% "scalatest" % scalatest % Test,
+ "org.mockito" % "mockito-core" % mockito % Test
+ )
+)
+
+lazy val apiInputFiles = Seq(
+ sources in Compile := {
+ val filteredFiles = {
+ for ((_, minor) <- CrossVersion.partialVersion(scalaVersion.value) if minor == 10)
+ yield ((baseDirectory.value / "src" / "main" / "scala") ** "*Macro.scala").get
+ }.getOrElse(Seq())
+ (sources in Compile).value.filterNot(filteredFiles.contains)
+ }
+)
+
+lazy val root = (project in file("."))
+ .settings(name := "log4j-api-scala")
+ .settings(metadataSettings: _*)
+ .settings(compileSettings: _*)
.settings(publishSettings: _*)
.settings(releaseSettings: _*)
- .settings(
- name := "log4j-api-scala",
- scalaVersion := scala211,
- crossScalaVersions := Seq(scala210, scala211, scala212, scala213),
- libraryDependencies ++= Seq(
- "org.scala-lang" % "scala-reflect" % scalaVersion.value,
- "org.apache.logging.log4j" % "log4j-api" % log4j,
- "org.apache.logging.log4j" % "log4j-api" % log4j % Test classifier "tests",
- "junit" % "junit" % junit % Test,
- "org.scalatest" %% "scalatest" % scalatest % Test,
- "org.mockito" % "mockito-core" % mockito % Test
- ),
- excludeFilter in Compile := new FileFilter {
- // override LoggerMacro for Scala 2.10
- override def accept(pathname: File): Boolean = {
- val Some((_, minor)) = CrossVersion.partialVersion(scalaVersion.value)
- minor == 10 && pathname.getName == "LoggerMacro.scala" && pathname.getParent.endsWith("src/main/scala/org/apache/logging/log4j/scala")
- }
- }
- )
+ .settings(apiDependencies: _*)
+ .settings(apiInputFiles: _*)
+
+//lazy val nopublish = Seq(
+// publish := {},
+// publishLocal := {},
+// publishM2 := {},
+// skip in publish := true
+//)
//lazy val sample = (project in file("sample"))
-// .settings(commonSettings)
+// .settings(metadataSettings: _*)
+// .settings(nopublish: _*)
// .settings(
// name := "log4j-api-scala-sample",
// scalaVersion := scala212,
@@ -67,26 +107,5 @@ lazy val api = (project in file("api"))
// "org.apache.logging.log4j" % "log4j-core" % log4j % Runtime
// )
// )
-// .dependsOn(api)
+// .dependsOn(root)
-pomExtra in ThisBuild := {
- <parent>
- <groupId>org.apache.logging</groupId>
- <artifactId>logging-parent</artifactId>
- <version>2</version>
- </parent>
- <developers>
- <developer>
- <id>mikes</id>
- <name>Mikael Ståldal</name>
- </developer>
- <developer>
- <id>mattsicker</id>
- <name>Matt Sicker</name>
- </developer>
- <developer>
- <id>ggregory</id>
- <name>Gary Gregory</name>
- </developer>
- </developers>
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/src/main/scala-2.10/org/apache/logging/log4j/scala/LoggerMacro.scala
----------------------------------------------------------------------
diff --git a/src/main/scala-2.10/org/apache/logging/log4j/scala/LoggerMacro.scala b/src/main/scala-2.10/org/apache/logging/log4j/scala/LoggerMacro.scala
new file mode 100644
index 0000000..24b3c8c
--- /dev/null
+++ b/src/main/scala-2.10/org/apache/logging/log4j/scala/LoggerMacro.scala
@@ -0,0 +1,425 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala
+
+import org.apache.logging.log4j.message.{EntryMessage, Message}
+import org.apache.logging.log4j.spi.AbstractLogger
+import org.apache.logging.log4j.{Level, Marker}
+
+import scala.language.experimental.macros
+import scala.reflect.macros.Context
+
+/**
+ * Inspired from [[https://github.com/typesafehub/scalalogging ScalaLogging]].
+ */
+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.FATAL), marker, message)
+
+ def fatalMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.FATAL), marker, message)
+
+ def fatalMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(c)(c.universe.reify(Level.FATAL), 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 fatalMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause)
+
+ def fatalMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 fatalCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.FATAL), message)
+
+ def fatalObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 fatalCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
+
+ def fatalObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 errorMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.ERROR), marker, message)
+
+ def errorMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 errorMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
+
+ def errorMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 errorCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.ERROR), message)
+
+ def errorObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 errorCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
+
+ def errorObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 warnMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.WARN), marker, message)
+
+ def warnMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 warnMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
+
+ def warnMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 warnCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.WARN), message)
+
+ def warnObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 warnCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.WARN), message, cause)
+
+ def warnObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 infoMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.INFO), marker, message)
+
+ def infoMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 infoMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
+
+ def infoMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 infoCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.INFO), message)
+
+ def infoObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 infoCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.INFO), message, cause)
+
+ def infoObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 debugMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.DEBUG), marker, message)
+
+ def debugMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 debugMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
+
+ def debugMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 debugCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.DEBUG), message)
+
+ def debugObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 debugCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
+
+ def debugObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 traceMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ logMarkerCseq(c)(c.universe.reify(Level.TRACE), marker, message)
+
+ def traceMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ logMarkerObject(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 traceMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logMarkerCseqThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
+
+ def traceMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logMarkerObjectThrowable(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 traceCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
+ logCseq(c)(c.universe.reify(Level.TRACE), message)
+
+ def traceObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
+ logObject(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 traceCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
+ logCseqThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
+
+ def traceObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
+ logObjectThrowable(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 logMarkerCseq(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
+ 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 logMarkerObject(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
+ 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 logMarkerCseqThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence], 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 logMarkerObjectThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef], 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 logCseq(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence]) =
+ c.universe.reify(
+ if (c.prefix.splice.delegate.isEnabled(level.splice)) {
+ c.prefix.splice.logMessage(level.splice, null, message.splice, null)
+ }
+ )
+
+ def logObject(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef]) =
+ 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 logCseqThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence], 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 logObjectThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef], 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 traceEntry(c: LoggerContext)(): c.Expr[EntryMessage] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceEntry()
+ )
+
+ def traceEntryParams(c: LoggerContext)(params: c.Expr[AnyRef]*): c.Expr[EntryMessage] = {
+ import c.universe._
+ val isEnabled = Apply(
+ Select(Select(c.prefix.tree, newTermName("delegate")), newTermName("isEnabled")),
+ List(
+ reify(Level.TRACE).tree,
+ reify(AbstractLogger.ENTRY_MARKER).tree,
+ reify(null: AnyRef).tree,
+ reify(null).tree
+ )
+ )
+
+ val log = Apply(
+ Select(Select(c.prefix.tree, newTermName("delegate")), newTermName("traceEntry")),
+ reify(null: String).tree :: (params map (_.tree)).toList
+ )
+ c.Expr[EntryMessage](If(isEnabled, log, reify(null).tree))
+ }
+
+
+ def traceEntryMessage(c: LoggerContext)(message: c.Expr[Message]): c.Expr[EntryMessage] =
+ c.universe.reify(
+ if (c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null: AnyRef, null)) {
+ c.prefix.splice.delegate.traceEntry(message.splice) // TODO should not do ifEnabled check
+ } else {
+ null
+ }
+ )
+
+ def traceExit(c: LoggerContext)(): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit()
+ )
+
+ def traceExitResult[R: c.WeakTypeTag](c: LoggerContext)(result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(result.splice)
+ )
+
+ def traceExitEntryMessage(c: LoggerContext)(entryMessage: c.Expr[EntryMessage]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(entryMessage.splice)
+ )
+
+ def traceExitEntryMessageResult[R: c.WeakTypeTag](c: LoggerContext)(entryMessage: c.Expr[EntryMessage], result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ c.prefix.splice.delegate.traceExit(entryMessage.splice, result.splice)
+ )
+
+ def traceExitMessageResult[R: c.WeakTypeTag](c: LoggerContext)(message: c.Expr[Message], result: c.Expr[R]): c.Expr[R] =
+ c.universe.reify(
+ {
+ if (message.splice != null && c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, message.splice, null)) {
+ c.prefix.splice.delegate.traceExit(message.splice, result.splice) // TODO should not do ifEnabled check
+ }
+ result.splice
+ }
+ )
+
+ def throwing[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(t: c.Expr[T]): c.Expr[T] =
+ c.universe.reify(
+ c.prefix.splice.delegate.throwing(t.splice)
+ )
+
+ def throwingLevel[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(level: c.Expr[Level], t: c.Expr[T]): c.Expr[T] =
+ c.universe.reify(
+ c.prefix.splice.delegate.throwing(level.splice, t.splice)
+ )
+
+ def catching(c: LoggerContext)(t: c.Expr[Throwable]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.catching(t.splice)
+ )
+
+ def catchingLevel(c: LoggerContext)(level: c.Expr[Level], t: c.Expr[Throwable]): c.Expr[Unit] =
+ c.universe.reify(
+ c.prefix.splice.delegate.catching(level.splice, t.splice)
+ )
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/src/main/scala/org/apache/logging/log4j/scala/Logger.scala
----------------------------------------------------------------------
diff --git a/src/main/scala/org/apache/logging/log4j/scala/Logger.scala b/src/main/scala/org/apache/logging/log4j/scala/Logger.scala
new file mode 100644
index 0000000..b42cd5a
--- /dev/null
+++ b/src/main/scala/org/apache/logging/log4j/scala/Logger.scala
@@ -0,0 +1,592 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala
+
+import org.apache.logging.log4j.message.{EntryMessage, Message, MessageFactory2}
+import org.apache.logging.log4j.spi.ExtendedLogger
+import org.apache.logging.log4j.{Level, LogManager, Marker}
+
+import scala.language.experimental.macros
+
+/**
+ * Factory for [[Logger]]s.
+ *
+ * The [[Logging]] trait provides a simple way to get a properly named logger into a class.
+ */
+object Logger {
+
+ final val FQCN = getClass.getName
+
+ /**
+ * Create a properly named [[Logger]] for a given class.
+ *
+ * @param clazz the class
+ */
+ def apply(clazz: Class[_]): Logger = Logger(LogManager.getContext(clazz.getClassLoader, false).getLogger(clazz.getName))
+
+ /**
+ * Create a [[Logger]] wrapping the given Log4j logger.
+ *
+ * @param delegate the Log4j logger to wrap
+ */
+ def apply(delegate: ExtendedLogger): Logger = new Logger(delegate)
+
+}
+
+/**
+ * Scala wrapper for the Log4j `Logger` interface.
+ *
+ * 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
+ * [[http://docs.scala-lang.org/overviews/core/string-interpolation.html string interpolation]]
+ * to achieve this:
+ *
+ * {{{
+ * logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
+ * }}}
+ *
+ * Since this wrapper is implemented with macros, the String construction and method invocations
+ * will only occur when debug logging is enabled.
+ */
+class Logger private(val delegate: ExtendedLogger) extends AnyVal {
+
+ def fatal(marker: Marker, message: Message): Unit =
+ macro LoggerMacro.fatalMarkerMsg
+
+ def fatal(marker: Marker, message: CharSequence): Unit =
+ macro LoggerMacro.fatalMarkerCseq
+
+ def fatal(marker: Marker, message: AnyRef): Unit =
+ macro LoggerMacro.fatalMarkerObject
+
+ def fatal(marker: Marker, message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.fatalMarkerMsgThrowable
+
+ def fatal(marker: Marker, message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.fatalMarkerCseqThrowable
+
+ def fatal(marker: Marker, message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.fatalMarkerObjectThrowable
+
+ def fatal(message: Message): Unit =
+ macro LoggerMacro.fatalMsg
+
+ def fatal(message: CharSequence): Unit =
+ macro LoggerMacro.fatalCseq
+
+ def fatal(message: AnyRef): Unit =
+ macro LoggerMacro.fatalObject
+
+ def fatal(message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.fatalMsgThrowable
+
+ def fatal(message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.fatalCseqThrowable
+
+ def fatal(message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.fatalObjectThrowable
+
+
+ def error(marker: Marker, message: Message): Unit =
+ macro LoggerMacro.errorMarkerMsg
+
+ def error(marker: Marker, message: CharSequence): Unit =
+ macro LoggerMacro.errorMarkerCseq
+
+ def error(marker: Marker, message: AnyRef): Unit =
+ macro LoggerMacro.errorMarkerObject
+
+ def error(marker: Marker, message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.errorMarkerMsgThrowable
+
+ def error(marker: Marker, message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.errorMarkerCseqThrowable
+
+ def error(marker: Marker, message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.errorMarkerObjectThrowable
+
+ def error(message: Message): Unit =
+ macro LoggerMacro.errorMsg
+
+ def error(message: CharSequence): Unit =
+ macro LoggerMacro.errorCseq
+
+ def error(message: AnyRef): Unit =
+ macro LoggerMacro.errorObject
+
+ def error(message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.errorMsgThrowable
+
+ def error(message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.errorCseqThrowable
+
+ def error(message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.errorObjectThrowable
+
+
+ def warn(marker: Marker, message: Message): Unit =
+ macro LoggerMacro.warnMarkerMsg
+
+ def warn(marker: Marker, message: CharSequence): Unit =
+ macro LoggerMacro.warnMarkerCseq
+
+ def warn(marker: Marker, message: AnyRef): Unit =
+ macro LoggerMacro.warnMarkerObject
+
+ def warn(marker: Marker, message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.warnMarkerMsgThrowable
+
+ def warn(marker: Marker, message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.warnMarkerCseqThrowable
+
+ def warn(marker: Marker, message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.warnMarkerObjectThrowable
+
+ def warn(message: Message): Unit =
+ macro LoggerMacro.warnMsg
+
+ def warn(message: CharSequence): Unit =
+ macro LoggerMacro.warnCseq
+
+ def warn(message: AnyRef): Unit =
+ macro LoggerMacro.warnObject
+
+ def warn(message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.warnMsgThrowable
+
+ def warn(message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.warnCseqThrowable
+
+ def warn(message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.warnObjectThrowable
+
+
+ def info(marker: Marker, message: Message): Unit =
+ macro LoggerMacro.infoMarkerMsg
+
+ def info(marker: Marker, message: CharSequence): Unit =
+ macro LoggerMacro.infoMarkerCseq
+
+ def info(marker: Marker, message: AnyRef): Unit =
+ macro LoggerMacro.infoMarkerObject
+
+ def info(marker: Marker, message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.infoMarkerMsgThrowable
+
+ def info(marker: Marker, message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.infoMarkerCseqThrowable
+
+ def info(marker: Marker, message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.infoMarkerObjectThrowable
+
+ def info(message: Message): Unit =
+ macro LoggerMacro.infoMsg
+
+ def info(message: CharSequence): Unit =
+ macro LoggerMacro.infoCseq
+
+ def info(message: AnyRef): Unit =
+ macro LoggerMacro.infoObject
+
+ def info(message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.infoMsgThrowable
+
+ def info(message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.infoCseqThrowable
+
+ def info(message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.infoObjectThrowable
+
+
+ def debug(marker: Marker, message: Message): Unit =
+ macro LoggerMacro.debugMarkerMsg
+
+ def debug(marker: Marker, message: CharSequence): Unit =
+ macro LoggerMacro.debugMarkerCseq
+
+ def debug(marker: Marker, message: AnyRef): Unit =
+ macro LoggerMacro.debugMarkerObject
+
+ def debug(marker: Marker, message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.debugMarkerMsgThrowable
+
+ def debug(marker: Marker, message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.debugMarkerCseqThrowable
+
+ def debug(marker: Marker, message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.debugMarkerObjectThrowable
+
+ def debug(message: Message): Unit =
+ macro LoggerMacro.debugMsg
+
+ def debug(message: CharSequence): Unit =
+ macro LoggerMacro.debugCseq
+
+ def debug(message: AnyRef): Unit =
+ macro LoggerMacro.debugObject
+
+ def debug(message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.debugMsgThrowable
+
+ def debug(message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.debugCseqThrowable
+
+ def debug(message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.debugObjectThrowable
+
+
+ def trace(marker: Marker, message: Message): Unit =
+ macro LoggerMacro.traceMarkerMsg
+
+ def trace(marker: Marker, message: CharSequence): Unit =
+ macro LoggerMacro.traceMarkerCseq
+
+ def trace(marker: Marker, message: AnyRef): Unit =
+ macro LoggerMacro.traceMarkerObject
+
+ def trace(marker: Marker, message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.traceMarkerMsgThrowable
+
+ def trace(marker: Marker, message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.traceMarkerCseqThrowable
+
+ def trace(marker: Marker, message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.traceMarkerObjectThrowable
+
+ def trace(message: Message): Unit =
+ macro LoggerMacro.traceMsg
+
+ def trace(message: CharSequence): Unit =
+ macro LoggerMacro.traceCseq
+
+ def trace(message: AnyRef): Unit =
+ macro LoggerMacro.traceObject
+
+ def trace(message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.traceMsgThrowable
+
+ def trace(message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.traceCseqThrowable
+
+ def trace(message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.traceObjectThrowable
+
+
+ /**
+ * Logs a `Message` with the specific `Marker` at the given `Level`.
+ *
+ * @param level the logging level
+ * @param marker the marker data specific to this log statement
+ * @param message the message to be logged
+ */
+ def apply(level: Level, marker: Marker, message: Message): Unit =
+ macro LoggerMacro.logMarkerMsg
+
+ /**
+ * Logs a string with the specific `Marker` at the given `Level`.
+ *
+ * @param level the logging level
+ * @param marker the marker data specific to this log statement
+ * @param message the message to be logged
+ */
+ def apply(level: Level, marker: Marker, message: CharSequence): Unit =
+ macro LoggerMacro.logMarkerCseq
+
+ /**
+ * Logs an object with the specific `Marker` at the given `Level`.
+ *
+ * @param level the logging level
+ * @param marker the marker data specific to this log statement
+ * @param message the message to be logged
+ */
+ def apply(level: Level, marker: Marker, message: AnyRef): Unit =
+ macro LoggerMacro.logMarkerObject
+
+ /**
+ * Logs a `Message` with the specific `Marker` at the given `Level` including the stack trace
+ * of the given `Throwable`.
+ *
+ * @param level the logging level
+ * @param marker the marker data specific to this log statement
+ * @param message the message to be logged
+ * @param cause the cause
+ */
+ def apply(level: Level, marker: Marker, message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.logMarkerMsgThrowable
+
+ /**
+ * Logs a string with the specific `Marker` at the given `Level` including the stack trace
+ * of the given `Throwable`.
+ *
+ * @param level the logging level
+ * @param marker the marker data specific to this log statement
+ * @param message the message to be logged
+ * @param cause the cause
+ */
+ def apply(level: Level, marker: Marker, message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.logMarkerCseqThrowable
+
+ /**
+ * Logs an object with the specific `Marker` at the given `Level` including the stack trace
+ * of the given `Throwable`.
+ *
+ * @param level the logging level
+ * @param marker the marker data specific to this log statement
+ * @param message the message to be logged
+ * @param cause the cause
+ */
+ def apply(level: Level, marker: Marker, message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.logMarkerObjectThrowable
+
+ /**
+ * Logs a `Message` at the given `Level`.
+ *
+ * @param level the logging level
+ * @param message the message to be logged
+ */
+ def apply(level: Level, message: Message): Unit =
+ macro LoggerMacro.logMsg
+
+ /**
+ * Logs a string at the given `Level`.
+ *
+ * @param level the logging level
+ * @param message the message to be logged
+ */
+ def apply(level: Level, message: CharSequence): Unit =
+ macro LoggerMacro.logCseq
+
+ /**
+ * Logs an object at the given `Level`.
+ *
+ * @param level the logging level
+ * @param message the message to be logged
+ */
+ def apply(level: Level, message: AnyRef): Unit =
+ macro LoggerMacro.logObject
+
+ /**
+ * Logs a `Message` at the given `Level` including the stack trace of the given `Throwable`.
+ *
+ * @param level the logging level
+ * @param message the message to be logged
+ * @param cause a `Throwable`
+ */
+ def apply(level: Level, message: Message, cause: Throwable): Unit =
+ macro LoggerMacro.logMsgThrowable
+
+ /**
+ * Logs a string at the given `Level` including the stack trace of the given `Throwable`.
+ *
+ * @param level the logging level
+ * @param message the message to be logged
+ * @param cause a `Throwable`
+ */
+ def apply(level: Level, message: CharSequence, cause: Throwable): Unit =
+ macro LoggerMacro.logCseqThrowable
+
+ /**
+ * Logs an object at the given `Level` including the stack trace of the given `Throwable`.
+ *
+ * @param level the logging level
+ * @param message the message to be logged
+ * @param cause a `Throwable`
+ */
+ def apply(level: Level, message: AnyRef, cause: Throwable): Unit =
+ macro LoggerMacro.logObjectThrowable
+
+
+ /**
+ * Logs entry to a method. Used when the method in question has no parameters or when the parameters should not be
+ * logged.
+ *
+ * @return The built `EntryMessage`
+ */
+ def traceEntry(): EntryMessage =
+ macro LoggerMacro.traceEntry
+
+ /**
+ * Logs entry to a method along with its parameters.
+ *
+ * {{{
+ * def doSomething(foo: String, bar: Int): Unit = {
+ * logger.traceEntry(foo, bar)
+ * // do something
+ * }
+ * }}}
+ *
+ * @param params the parameters to the method.
+ * @return The built `EntryMessage`
+ */
+ def traceEntry(params: AnyRef*): EntryMessage =
+ macro LoggerMacro.traceEntryParams
+
+ /**
+ * Logs entry to a method using a `Message` to describe the parameters.
+ *
+ * {{{
+ * def doSomething(foo: Request): Unit = {
+ * logger.traceEntry(JsonMessage(foo))
+ * // do something
+ * }
+ * }}}
+ *
+ * @param message the message
+ * @return The built `EntryMessage`
+ */
+ def traceEntry(message: Message): EntryMessage =
+ macro LoggerMacro.traceEntryMessage
+
+ /**
+ * Logs exit from a method with no result.
+ */
+ def traceExit(): Unit =
+ macro LoggerMacro.traceExit
+
+ /**
+ * Logs exiting from a method with result.
+ *
+ * @param result The result being returned from the method call
+ * @return `result`
+ */
+ def traceExit[R](result: R): R =
+ macro LoggerMacro.traceExitResult[R]
+
+ /**
+ * Logs exiting from a method with no result.
+ *
+ * @param entryMessage the `EntryMessage` returned from one of the `traceEntry` methods
+ */
+ def traceExit(entryMessage: EntryMessage): Unit =
+ macro LoggerMacro.traceExitEntryMessage
+
+ /**
+ * Logs exiting from a method with result.
+ *
+ * {{{
+ * def doSomething(foo: String, bar: Int): Int = {
+ * val entryMessage = logger.traceEntry(foo, bar)
+ * // do something
+ * traceExit(entryMessage, value)
+ * }
+ * }}}
+ *
+ * @param entryMessage the `EntryMessage` returned from one of the `traceEntry` methods
+ * @param result The result being returned from the method call
+ * @return `result`
+ */
+ def traceExit[R](entryMessage: EntryMessage, result: R): R =
+ macro LoggerMacro.traceExitEntryMessageResult[R]
+
+ /**
+ * Logs exiting from a method with result. Allows custom formatting of the result.
+ *
+ * @param message the Message containing the formatted result
+ * @param result The result being returned from the method call.
+ * @return `result`
+ */
+ def traceExit[R](message: Message, result: R): R =
+ macro LoggerMacro.traceExitMessageResult[R]
+
+ /**
+ * Logs an exception or error to be thrown.
+ *
+ * {{{
+ * throw logger.throwing(myException)
+ * }}}
+ *
+ * @param t the Throwable
+ * @return `t`
+ */
+ def throwing[T <: Throwable](t: T): T =
+ macro LoggerMacro.throwing[T]
+
+ /**
+ * Logs an exception or error to be thrown to a specific logging level.
+ *
+ * {{{
+ * throw logger.throwing(Level.DEBUG, myException)
+ * }}}
+ *
+ * @param level the logging Level.
+ * @param t the Throwable
+ * @return `t`
+ */
+ def throwing[T <: Throwable](level: Level, t: T): T =
+ macro LoggerMacro.throwingLevel[T]
+
+ /**
+ * Logs an exception or error that has been caught.
+ *
+ * @param t the Throwable.
+ */
+ def catching(t: Throwable): Unit =
+ macro LoggerMacro.catching
+
+ /**
+ * Logs an exception or error that has been caught to a specific logging level.
+ *
+ * @param level The logging Level.
+ * @param t The Throwable.
+ */
+ def catching(level: Level, t: Throwable): Unit =
+ macro LoggerMacro.catchingLevel
+
+
+ /** Always logs a message at the specified level. It is the responsibility of the caller to ensure the specified
+ * level is enabled.
+ *
+ * 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.logMessage(Logger.FQCN, level, marker, message, cause)
+ }
+
+ /** Always logs a message at the specified level. It is the responsibility of the caller to ensure the specified
+ * level is enabled.
+ *
+ * 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: CharSequence, cause: Throwable): Unit = {
+ delegate.logMessage(Logger.FQCN, level, marker, delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage(message), cause)
+ }
+
+ /** Always logs a message at the specified level. It is the responsibility of the caller to ensure the specified
+ * level is enabled.
+ *
+ * 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: AnyRef, cause: Throwable): Unit = {
+ delegate.logMessage(Logger.FQCN, level, marker, delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage(message), cause)
+ }
+
+}
[37/50] [abbrv] logging-log4j-scala git commit: Clarify logger names
Posted by ma...@apache.org.
Clarify logger names
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/4e87e1f3
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/4e87e1f3
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/4e87e1f3
Branch: refs/heads/master
Commit: 4e87e1f3a333d457704908a7d20fbef3a399e304
Parents: 8ef7ea2
Author: Matt Sicker <bo...@gmail.com>
Authored: Sun Apr 1 13:43:17 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sun Apr 1 13:43:17 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/usage.adoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/4e87e1f3/src/asciidoctor/usage.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/usage.adoc b/src/asciidoctor/usage.adoc
index 528e999..6f60637 100644
--- a/src/asciidoctor/usage.adoc
+++ b/src/asciidoctor/usage.adoc
@@ -71,4 +71,4 @@ logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday
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.
+The `Logger` property added by the `Logging` trait follows this convention: the trait ensures the `Logger` is automatically named according to the class it is being used in.
[08/50] [abbrv] logging-log4j-scala git commit: LOG4J2-2296: Add
minimal website generator config
Posted by ma...@apache.org.
LOG4J2-2296: Add minimal website generator config
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/b510c122
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/b510c122
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/b510c122
Branch: refs/heads/master
Commit: b510c122e94c6cfb0b957f6a8ed83ecdc1057142
Parents: 53cfa5d
Author: Matt Sicker <bo...@gmail.com>
Authored: Thu Mar 29 20:13:58 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Thu Mar 29 20:13:58 2018 -0500
----------------------------------------------------------------------
build.sbt | 1 +
log4j-api-scala_2.10/src/site/markdown/index.md | 74 ----------------
log4j-api-scala_2.11/src/site/markdown/index.md | 74 ----------------
log4j-api-scala_2.12/src/site/markdown/index.md | 74 ----------------
log4j-api-scala_2.13/src/site/markdown/index.md | 74 ----------------
project/plugins.sbt | 2 +
src/asciidoctor/index.adoc | 88 ++++++++++++++++++++
7 files changed, 91 insertions(+), 296 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/b510c122/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 118337c..6dba52b 100644
--- a/build.sbt
+++ b/build.sbt
@@ -96,6 +96,7 @@ lazy val root = (project in file("."))
.settings(releaseSettings: _*)
.settings(apiDependencies: _*)
.settings(apiInputFiles: _*)
+ .enablePlugins(AsciidoctorPlugin)
// .enablePlugins(SbtOsgi)
// .settings(bundleSettings: _*)
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/b510c122/log4j-api-scala_2.10/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/log4j-api-scala_2.10/src/site/markdown/index.md b/log4j-api-scala_2.10/src/site/markdown/index.md
deleted file mode 100644
index ce84e3d..0000000
--- a/log4j-api-scala_2.10/src/site/markdown/index.md
+++ /dev/null
@@ -1,74 +0,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.
--->
-# Log4j Scala 2.10 API
-
-## Requirements
-
-Log4j Scala API for Scala 2.10 requires Log4j API, Java 7, the Scala runtime
-library, and the Scala reflection library. To use Log4j as a logging implementation,
-then Log4j Core must also be included. Instructions on using these dependencies are
-in the [dependency information page][dependencies], and additional information is
-included in the [Log4j artifacts][artifacts] page.
-
-## Example Usage
-
-<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>
-
-## Configuration
-
-Log4j Scala 2.10 API uses the standard [Log4j configuration][configuration]
-plugins. This supports XML, properties files, and a configuration builder DSL by
-default, and it optionally supports JSON and YAML formats with some additional
-Jackson dependencies.
-
-## Substituting Parameters
-
-In the Java API, parameters to a log message are interpolated using various
-strategies. In the Scala API, [string interpolation][interpolation] is used
-instead. As all logger methods are implemented as macros, string construction and
-method invocations will only occur when logging is enabled for the given log
-level. For example:
-
-<pre class="prettyprint linenums">
-logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
-</pre>
-
-## Logger Names
-
-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][logging]
-will automatically name the Logger accordingly to the class it is being used in.
-
-[dependencies]: dependency-info.html
-[artifacts]: ../maven-artifacts.html
-[configuration]: ../configuration.html
-[interpolation]: http://docs.scala-lang.org/overviews/core/string-interpolation.html
-[logging]: scaladocs/index.html#org.apache.logging.log4j.scala.Logging
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/b510c122/log4j-api-scala_2.11/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/log4j-api-scala_2.11/src/site/markdown/index.md b/log4j-api-scala_2.11/src/site/markdown/index.md
deleted file mode 100644
index 7ababf1..0000000
--- a/log4j-api-scala_2.11/src/site/markdown/index.md
+++ /dev/null
@@ -1,74 +0,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.
--->
-# Log4j Scala 2.11 API
-
-## Requirements
-
-Log4j Scala API for Scala 2.11 requires Log4j API, Java 7, the Scala runtime
-library, and the Scala reflection library. To use Log4j as a logging implementation,
-then Log4j Core must also be included. Instructions on using these dependencies are
-in the [dependency information page][dependencies], and additional information is
-included in the [Log4j artifacts][artifacts] page.
-
-## Example Usage
-
-<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>
-
-## Configuration
-
-Log4j Scala 2.11 API uses the standard [Log4j configuration][configuration]
-plugins. This supports XML, properties files, and a configuration builder DSL by
-default, and it optionally supports JSON and YAML formats with some additional
-Jackson dependencies.
-
-## Substituting Parameters
-
-In the Java API, parameters to a log message are interpolated using various
-strategies. In the Scala API, [string interpolation][interpolation] is used
-instead. As all logger methods are implemented as macros, string construction and
-method invocations will only occur when logging is enabled for the given log
-level. For example:
-
-<pre class="prettyprint linenums">
-logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
-</pre>
-
-## Logger Names
-
-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][logging]
-will automatically name the Logger accordingly to the class it is being used in.
-
-[dependencies]: dependency-info.html
-[artifacts]: ../maven-artifacts.html
-[configuration]: ../configuration.html
-[interpolation]: http://docs.scala-lang.org/overviews/core/string-interpolation.html
-[logging]: scaladocs/index.html#org.apache.logging.log4j.scala.Logging
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/b510c122/log4j-api-scala_2.12/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/log4j-api-scala_2.12/src/site/markdown/index.md b/log4j-api-scala_2.12/src/site/markdown/index.md
deleted file mode 100644
index 7acf397..0000000
--- a/log4j-api-scala_2.12/src/site/markdown/index.md
+++ /dev/null
@@ -1,74 +0,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.
--->
-# Log4j Scala 2.12 API
-
-## Requirements
-
-Log4j Scala API for Scala 2.12 requires Log4j API, Java 8, the Scala runtime
-library, and the Scala reflection library. To use Log4j as a logging implementation,
-then Log4j Core must also be included. Instructions on using these dependencies are
-in the [dependency information page][dependencies], and additional information is
-included in the [Log4j artifacts][artifacts] page.
-
-## Example Usage
-
-<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>
-
-## Configuration
-
-Log4j Scala 2.12 API uses the standard [Log4j configuration][configuration]
-plugins. This supports XML, properties files, and a configuration builder DSL by
-default, and it optionally supports JSON and YAML formats with some additional
-Jackson dependencies.
-
-## Substituting Parameters
-
-In the Java API, parameters to a log message are interpolated using various
-strategies. In the Scala API, [string interpolation][interpolation] is used
-instead. As all logger methods are implemented as macros, string construction and
-method invocations will only occur when logging is enabled for the given log
-level. For example:
-
-<pre class="prettyprint linenums">
-logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
-</pre>
-
-## Logger Names
-
-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][logging]
-will automatically name the Logger accordingly to the class it is being used in.
-
-[dependencies]: dependency-info.html
-[artifacts]: ../maven-artifacts.html
-[configuration]: ../configuration.html
-[interpolation]: http://docs.scala-lang.org/overviews/core/string-interpolation.html
-[logging]: scaladocs/org/apache/logging/log4j/scala/Logging.html
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/b510c122/log4j-api-scala_2.13/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/log4j-api-scala_2.13/src/site/markdown/index.md b/log4j-api-scala_2.13/src/site/markdown/index.md
deleted file mode 100644
index 7acf397..0000000
--- a/log4j-api-scala_2.13/src/site/markdown/index.md
+++ /dev/null
@@ -1,74 +0,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.
--->
-# Log4j Scala 2.12 API
-
-## Requirements
-
-Log4j Scala API for Scala 2.12 requires Log4j API, Java 8, the Scala runtime
-library, and the Scala reflection library. To use Log4j as a logging implementation,
-then Log4j Core must also be included. Instructions on using these dependencies are
-in the [dependency information page][dependencies], and additional information is
-included in the [Log4j artifacts][artifacts] page.
-
-## Example Usage
-
-<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>
-
-## Configuration
-
-Log4j Scala 2.12 API uses the standard [Log4j configuration][configuration]
-plugins. This supports XML, properties files, and a configuration builder DSL by
-default, and it optionally supports JSON and YAML formats with some additional
-Jackson dependencies.
-
-## Substituting Parameters
-
-In the Java API, parameters to a log message are interpolated using various
-strategies. In the Scala API, [string interpolation][interpolation] is used
-instead. As all logger methods are implemented as macros, string construction and
-method invocations will only occur when logging is enabled for the given log
-level. For example:
-
-<pre class="prettyprint linenums">
-logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
-</pre>
-
-## Logger Names
-
-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][logging]
-will automatically name the Logger accordingly to the class it is being used in.
-
-[dependencies]: dependency-info.html
-[artifacts]: ../maven-artifacts.html
-[configuration]: ../configuration.html
-[interpolation]: http://docs.scala-lang.org/overviews/core/string-interpolation.html
-[logging]: scaladocs/org/apache/logging/log4j/scala/Logging.html
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/b510c122/project/plugins.sbt
----------------------------------------------------------------------
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 5e55c9d..df90981 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -1,3 +1,5 @@
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.1")
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.8")
addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0")
+addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.3.2")
+//addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.9.3")
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/b510c122/src/asciidoctor/index.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/index.adoc b/src/asciidoctor/index.adoc
new file mode 100644
index 0000000..b9595af
--- /dev/null
+++ b/src/asciidoctor/index.adoc
@@ -0,0 +1,88 @@
+////
+ 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.
+////
+= Apache Log4j Scala API
+
+Log4j Scala API is a Scala logging facade based on Log4j 2.
+Support for Scala versions 2.10, 2.11, and 2.12 are provided, and experimental support for pre-release versions of 2.13 is also provided.
+Log4j Scala API uses Log4j 2.x as its logging backend by default, but this can also be replaced with compatible libraries (e.g., Logback).
+While this library is not required to use Log4j API in Scala, it does provide idiomatic Scala APIs which are friendlier to use in Scala programs than the Java APIs.
+
+== Usage
+
+Log4j Scala API requires Log4j API. An example SBT dependency setup:
+
+.build.sbt
+[source,scala]
+----
+libraryDependencies ++= Seq(
+ "org.apache.logging.log4j" %% "log4j-api-scala" % "11.0",
+ "org.apache.logging.log4j" % "log4j-api" % "2.11.0",
+ "org.apache.logging.log4j" % "log4j-core" % "2.11.0" % Runtime)
+----
+
+Using the Scala API is as simple as mixing in the `Logging` trait to your class. Example:
+
+[source,scala]
+----
+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")
+ }
+ def doStuffWithUser(user: User): Unit = {
+ logger.info(s"Doing stuff with ${user.getName}.")
+ }
+}
+----
+
+== Configuration
+
+Log4j Scala API uses https://logging.apache.org/log4j/2.x/manual/configuration.html[Log4j configuration] by default.
+This supports XML, properties files, and Java-based builders, as well as JSON and YAML with additional dependencies.
+
+== Substituting Parameters
+
+Unlike in Java, Scala provides native functionality for string interpolation https://docs.scala-lang.org/overviews/core/string-interpolation.html[beginning in Scala 2.10].
+As all logger calls are implemented as macros, using string interpolation directly does not require additional if checks.
+For example:
+
+[source,scala]
+----
+logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
+----
+
+== Logger Names
+
+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.
+
+////
+TODO:
+* Apache logo
+* Downloads page
+* Changelog page
+* License report
+* Other reports?
+* ScalaDocs links
+* Project links
+////
\ No newline at end of file
[25/50] [abbrv] logging-log4j-scala git commit: Add rat checks to
jenkins pipeline
Posted by ma...@apache.org.
Add rat checks to jenkins pipeline
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/a6af7ecc
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/a6af7ecc
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/a6af7ecc
Branch: refs/heads/master
Commit: a6af7ecc166c2fdd439a0cc69833002d5680db36
Parents: 34e39f8
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 18:06:25 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 18:06:25 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/a6af7ecc/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index 90b3893..c9d0812 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -27,6 +27,7 @@ pipeline {
stage('Build') {
steps {
ansiColor('xterm') {
+ sh './sbt -batch auditCheck'
sh './sbt -batch "+ compile"'
}
}
@@ -34,6 +35,7 @@ pipeline {
stage('Test') {
steps {
ansiColor('xterm') {
+ sh './sbt -batch Test/auditCheck'
sh './sbt -batch "+ test"'
}
}
[04/50] [abbrv] logging-log4j-scala git commit: Reorganize api module
Posted by ma...@apache.org.
Reorganize api module
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/72fe94f7
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/72fe94f7
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/72fe94f7
Branch: refs/heads/master
Commit: 72fe94f7cf604c5962d2a47b16ab3845f844da92
Parents: 3b425c9
Author: Matt Sicker <bo...@gmail.com>
Authored: Wed Mar 28 19:59:00 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Wed Mar 28 19:59:00 2018 -0500
----------------------------------------------------------------------
.../logging/log4j/scala/LoggerMacro.scala | 425 -------------
.../org/apache/logging/log4j/scala/Logger.scala | 592 -------------------
.../logging/log4j/scala/LoggerMacro.scala | 425 -------------
.../apache/logging/log4j/scala/Logging.scala | 30 -
.../logging/log4j/scala/LoggingContext.scala | 84 ---
.../apache/logging/log4j/scala/LoggerTest.scala | 552 -----------------
.../log4j/scala/LoggingContextTest.scala | 115 ----
build.sbt | 139 +++--
.../logging/log4j/scala/LoggerMacro.scala | 425 +++++++++++++
.../org/apache/logging/log4j/scala/Logger.scala | 592 +++++++++++++++++++
.../logging/log4j/scala/LoggerMacro.scala | 425 +++++++++++++
.../apache/logging/log4j/scala/Logging.scala | 30 +
.../logging/log4j/scala/LoggingContext.scala | 84 +++
.../apache/logging/log4j/scala/LoggerTest.scala | 552 +++++++++++++++++
.../log4j/scala/LoggingContextTest.scala | 115 ++++
15 files changed, 2302 insertions(+), 2283 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/api/src/main/scala-2.10/org/apache/logging/log4j/scala/LoggerMacro.scala
----------------------------------------------------------------------
diff --git a/api/src/main/scala-2.10/org/apache/logging/log4j/scala/LoggerMacro.scala b/api/src/main/scala-2.10/org/apache/logging/log4j/scala/LoggerMacro.scala
deleted file mode 100644
index 24b3c8c..0000000
--- a/api/src/main/scala-2.10/org/apache/logging/log4j/scala/LoggerMacro.scala
+++ /dev/null
@@ -1,425 +0,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.
- */
-package org.apache.logging.log4j.scala
-
-import org.apache.logging.log4j.message.{EntryMessage, Message}
-import org.apache.logging.log4j.spi.AbstractLogger
-import org.apache.logging.log4j.{Level, Marker}
-
-import scala.language.experimental.macros
-import scala.reflect.macros.Context
-
-/**
- * Inspired from [[https://github.com/typesafehub/scalalogging ScalaLogging]].
- */
-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.FATAL), marker, message)
-
- def fatalMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.FATAL), marker, message)
-
- def fatalMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(c)(c.universe.reify(Level.FATAL), 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 fatalMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause)
-
- def fatalMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 fatalCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.FATAL), message)
-
- def fatalObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 fatalCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
-
- def fatalObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 errorMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.ERROR), marker, message)
-
- def errorMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 errorMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
-
- def errorMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 errorCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.ERROR), message)
-
- def errorObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 errorCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
-
- def errorObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 warnMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.WARN), marker, message)
-
- def warnMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 warnMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
-
- def warnMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 warnCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.WARN), message)
-
- def warnObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 warnCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.WARN), message, cause)
-
- def warnObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 infoMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.INFO), marker, message)
-
- def infoMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 infoMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
-
- def infoMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 infoCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.INFO), message)
-
- def infoObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 infoCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.INFO), message, cause)
-
- def infoObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 debugMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.DEBUG), marker, message)
-
- def debugMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 debugMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
-
- def debugMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 debugCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.DEBUG), message)
-
- def debugObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 debugCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
-
- def debugObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 traceMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.TRACE), marker, message)
-
- def traceMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 traceMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
-
- def traceMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 traceCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.TRACE), message)
-
- def traceObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 traceCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
-
- def traceObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 logMarkerCseq(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- 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 logMarkerObject(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- 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 logMarkerCseqThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence], 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 logMarkerObjectThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef], 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 logCseq(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence]) =
- c.universe.reify(
- if (c.prefix.splice.delegate.isEnabled(level.splice)) {
- c.prefix.splice.logMessage(level.splice, null, message.splice, null)
- }
- )
-
- def logObject(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef]) =
- 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 logCseqThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence], 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 logObjectThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef], 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 traceEntry(c: LoggerContext)(): c.Expr[EntryMessage] =
- c.universe.reify(
- c.prefix.splice.delegate.traceEntry()
- )
-
- def traceEntryParams(c: LoggerContext)(params: c.Expr[AnyRef]*): c.Expr[EntryMessage] = {
- import c.universe._
- val isEnabled = Apply(
- Select(Select(c.prefix.tree, newTermName("delegate")), newTermName("isEnabled")),
- List(
- reify(Level.TRACE).tree,
- reify(AbstractLogger.ENTRY_MARKER).tree,
- reify(null: AnyRef).tree,
- reify(null).tree
- )
- )
-
- val log = Apply(
- Select(Select(c.prefix.tree, newTermName("delegate")), newTermName("traceEntry")),
- reify(null: String).tree :: (params map (_.tree)).toList
- )
- c.Expr[EntryMessage](If(isEnabled, log, reify(null).tree))
- }
-
-
- def traceEntryMessage(c: LoggerContext)(message: c.Expr[Message]): c.Expr[EntryMessage] =
- c.universe.reify(
- if (c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null: AnyRef, null)) {
- c.prefix.splice.delegate.traceEntry(message.splice) // TODO should not do ifEnabled check
- } else {
- null
- }
- )
-
- def traceExit(c: LoggerContext)(): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit()
- )
-
- def traceExitResult[R: c.WeakTypeTag](c: LoggerContext)(result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(result.splice)
- )
-
- def traceExitEntryMessage(c: LoggerContext)(entryMessage: c.Expr[EntryMessage]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(entryMessage.splice)
- )
-
- def traceExitEntryMessageResult[R: c.WeakTypeTag](c: LoggerContext)(entryMessage: c.Expr[EntryMessage], result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(entryMessage.splice, result.splice)
- )
-
- def traceExitMessageResult[R: c.WeakTypeTag](c: LoggerContext)(message: c.Expr[Message], result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- {
- if (message.splice != null && c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, message.splice, null)) {
- c.prefix.splice.delegate.traceExit(message.splice, result.splice) // TODO should not do ifEnabled check
- }
- result.splice
- }
- )
-
- def throwing[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(t: c.Expr[T]): c.Expr[T] =
- c.universe.reify(
- c.prefix.splice.delegate.throwing(t.splice)
- )
-
- def throwingLevel[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(level: c.Expr[Level], t: c.Expr[T]): c.Expr[T] =
- c.universe.reify(
- c.prefix.splice.delegate.throwing(level.splice, t.splice)
- )
-
- def catching(c: LoggerContext)(t: c.Expr[Throwable]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.catching(t.splice)
- )
-
- def catchingLevel(c: LoggerContext)(level: c.Expr[Level], t: c.Expr[Throwable]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.catching(level.splice, t.splice)
- )
-
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/api/src/main/scala/org/apache/logging/log4j/scala/Logger.scala
----------------------------------------------------------------------
diff --git a/api/src/main/scala/org/apache/logging/log4j/scala/Logger.scala b/api/src/main/scala/org/apache/logging/log4j/scala/Logger.scala
deleted file mode 100644
index b42cd5a..0000000
--- a/api/src/main/scala/org/apache/logging/log4j/scala/Logger.scala
+++ /dev/null
@@ -1,592 +0,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.
- */
-package org.apache.logging.log4j.scala
-
-import org.apache.logging.log4j.message.{EntryMessage, Message, MessageFactory2}
-import org.apache.logging.log4j.spi.ExtendedLogger
-import org.apache.logging.log4j.{Level, LogManager, Marker}
-
-import scala.language.experimental.macros
-
-/**
- * Factory for [[Logger]]s.
- *
- * The [[Logging]] trait provides a simple way to get a properly named logger into a class.
- */
-object Logger {
-
- final val FQCN = getClass.getName
-
- /**
- * Create a properly named [[Logger]] for a given class.
- *
- * @param clazz the class
- */
- def apply(clazz: Class[_]): Logger = Logger(LogManager.getContext(clazz.getClassLoader, false).getLogger(clazz.getName))
-
- /**
- * Create a [[Logger]] wrapping the given Log4j logger.
- *
- * @param delegate the Log4j logger to wrap
- */
- def apply(delegate: ExtendedLogger): Logger = new Logger(delegate)
-
-}
-
-/**
- * Scala wrapper for the Log4j `Logger` interface.
- *
- * 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
- * [[http://docs.scala-lang.org/overviews/core/string-interpolation.html string interpolation]]
- * to achieve this:
- *
- * {{{
- * logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
- * }}}
- *
- * Since this wrapper is implemented with macros, the String construction and method invocations
- * will only occur when debug logging is enabled.
- */
-class Logger private(val delegate: ExtendedLogger) extends AnyVal {
-
- def fatal(marker: Marker, message: Message): Unit =
- macro LoggerMacro.fatalMarkerMsg
-
- def fatal(marker: Marker, message: CharSequence): Unit =
- macro LoggerMacro.fatalMarkerCseq
-
- def fatal(marker: Marker, message: AnyRef): Unit =
- macro LoggerMacro.fatalMarkerObject
-
- def fatal(marker: Marker, message: Message, cause: Throwable): Unit =
- macro LoggerMacro.fatalMarkerMsgThrowable
-
- def fatal(marker: Marker, message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.fatalMarkerCseqThrowable
-
- def fatal(marker: Marker, message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.fatalMarkerObjectThrowable
-
- def fatal(message: Message): Unit =
- macro LoggerMacro.fatalMsg
-
- def fatal(message: CharSequence): Unit =
- macro LoggerMacro.fatalCseq
-
- def fatal(message: AnyRef): Unit =
- macro LoggerMacro.fatalObject
-
- def fatal(message: Message, cause: Throwable): Unit =
- macro LoggerMacro.fatalMsgThrowable
-
- def fatal(message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.fatalCseqThrowable
-
- def fatal(message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.fatalObjectThrowable
-
-
- def error(marker: Marker, message: Message): Unit =
- macro LoggerMacro.errorMarkerMsg
-
- def error(marker: Marker, message: CharSequence): Unit =
- macro LoggerMacro.errorMarkerCseq
-
- def error(marker: Marker, message: AnyRef): Unit =
- macro LoggerMacro.errorMarkerObject
-
- def error(marker: Marker, message: Message, cause: Throwable): Unit =
- macro LoggerMacro.errorMarkerMsgThrowable
-
- def error(marker: Marker, message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.errorMarkerCseqThrowable
-
- def error(marker: Marker, message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.errorMarkerObjectThrowable
-
- def error(message: Message): Unit =
- macro LoggerMacro.errorMsg
-
- def error(message: CharSequence): Unit =
- macro LoggerMacro.errorCseq
-
- def error(message: AnyRef): Unit =
- macro LoggerMacro.errorObject
-
- def error(message: Message, cause: Throwable): Unit =
- macro LoggerMacro.errorMsgThrowable
-
- def error(message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.errorCseqThrowable
-
- def error(message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.errorObjectThrowable
-
-
- def warn(marker: Marker, message: Message): Unit =
- macro LoggerMacro.warnMarkerMsg
-
- def warn(marker: Marker, message: CharSequence): Unit =
- macro LoggerMacro.warnMarkerCseq
-
- def warn(marker: Marker, message: AnyRef): Unit =
- macro LoggerMacro.warnMarkerObject
-
- def warn(marker: Marker, message: Message, cause: Throwable): Unit =
- macro LoggerMacro.warnMarkerMsgThrowable
-
- def warn(marker: Marker, message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.warnMarkerCseqThrowable
-
- def warn(marker: Marker, message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.warnMarkerObjectThrowable
-
- def warn(message: Message): Unit =
- macro LoggerMacro.warnMsg
-
- def warn(message: CharSequence): Unit =
- macro LoggerMacro.warnCseq
-
- def warn(message: AnyRef): Unit =
- macro LoggerMacro.warnObject
-
- def warn(message: Message, cause: Throwable): Unit =
- macro LoggerMacro.warnMsgThrowable
-
- def warn(message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.warnCseqThrowable
-
- def warn(message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.warnObjectThrowable
-
-
- def info(marker: Marker, message: Message): Unit =
- macro LoggerMacro.infoMarkerMsg
-
- def info(marker: Marker, message: CharSequence): Unit =
- macro LoggerMacro.infoMarkerCseq
-
- def info(marker: Marker, message: AnyRef): Unit =
- macro LoggerMacro.infoMarkerObject
-
- def info(marker: Marker, message: Message, cause: Throwable): Unit =
- macro LoggerMacro.infoMarkerMsgThrowable
-
- def info(marker: Marker, message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.infoMarkerCseqThrowable
-
- def info(marker: Marker, message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.infoMarkerObjectThrowable
-
- def info(message: Message): Unit =
- macro LoggerMacro.infoMsg
-
- def info(message: CharSequence): Unit =
- macro LoggerMacro.infoCseq
-
- def info(message: AnyRef): Unit =
- macro LoggerMacro.infoObject
-
- def info(message: Message, cause: Throwable): Unit =
- macro LoggerMacro.infoMsgThrowable
-
- def info(message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.infoCseqThrowable
-
- def info(message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.infoObjectThrowable
-
-
- def debug(marker: Marker, message: Message): Unit =
- macro LoggerMacro.debugMarkerMsg
-
- def debug(marker: Marker, message: CharSequence): Unit =
- macro LoggerMacro.debugMarkerCseq
-
- def debug(marker: Marker, message: AnyRef): Unit =
- macro LoggerMacro.debugMarkerObject
-
- def debug(marker: Marker, message: Message, cause: Throwable): Unit =
- macro LoggerMacro.debugMarkerMsgThrowable
-
- def debug(marker: Marker, message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.debugMarkerCseqThrowable
-
- def debug(marker: Marker, message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.debugMarkerObjectThrowable
-
- def debug(message: Message): Unit =
- macro LoggerMacro.debugMsg
-
- def debug(message: CharSequence): Unit =
- macro LoggerMacro.debugCseq
-
- def debug(message: AnyRef): Unit =
- macro LoggerMacro.debugObject
-
- def debug(message: Message, cause: Throwable): Unit =
- macro LoggerMacro.debugMsgThrowable
-
- def debug(message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.debugCseqThrowable
-
- def debug(message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.debugObjectThrowable
-
-
- def trace(marker: Marker, message: Message): Unit =
- macro LoggerMacro.traceMarkerMsg
-
- def trace(marker: Marker, message: CharSequence): Unit =
- macro LoggerMacro.traceMarkerCseq
-
- def trace(marker: Marker, message: AnyRef): Unit =
- macro LoggerMacro.traceMarkerObject
-
- def trace(marker: Marker, message: Message, cause: Throwable): Unit =
- macro LoggerMacro.traceMarkerMsgThrowable
-
- def trace(marker: Marker, message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.traceMarkerCseqThrowable
-
- def trace(marker: Marker, message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.traceMarkerObjectThrowable
-
- def trace(message: Message): Unit =
- macro LoggerMacro.traceMsg
-
- def trace(message: CharSequence): Unit =
- macro LoggerMacro.traceCseq
-
- def trace(message: AnyRef): Unit =
- macro LoggerMacro.traceObject
-
- def trace(message: Message, cause: Throwable): Unit =
- macro LoggerMacro.traceMsgThrowable
-
- def trace(message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.traceCseqThrowable
-
- def trace(message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.traceObjectThrowable
-
-
- /**
- * Logs a `Message` with the specific `Marker` at the given `Level`.
- *
- * @param level the logging level
- * @param marker the marker data specific to this log statement
- * @param message the message to be logged
- */
- def apply(level: Level, marker: Marker, message: Message): Unit =
- macro LoggerMacro.logMarkerMsg
-
- /**
- * Logs a string with the specific `Marker` at the given `Level`.
- *
- * @param level the logging level
- * @param marker the marker data specific to this log statement
- * @param message the message to be logged
- */
- def apply(level: Level, marker: Marker, message: CharSequence): Unit =
- macro LoggerMacro.logMarkerCseq
-
- /**
- * Logs an object with the specific `Marker` at the given `Level`.
- *
- * @param level the logging level
- * @param marker the marker data specific to this log statement
- * @param message the message to be logged
- */
- def apply(level: Level, marker: Marker, message: AnyRef): Unit =
- macro LoggerMacro.logMarkerObject
-
- /**
- * Logs a `Message` with the specific `Marker` at the given `Level` including the stack trace
- * of the given `Throwable`.
- *
- * @param level the logging level
- * @param marker the marker data specific to this log statement
- * @param message the message to be logged
- * @param cause the cause
- */
- def apply(level: Level, marker: Marker, message: Message, cause: Throwable): Unit =
- macro LoggerMacro.logMarkerMsgThrowable
-
- /**
- * Logs a string with the specific `Marker` at the given `Level` including the stack trace
- * of the given `Throwable`.
- *
- * @param level the logging level
- * @param marker the marker data specific to this log statement
- * @param message the message to be logged
- * @param cause the cause
- */
- def apply(level: Level, marker: Marker, message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.logMarkerCseqThrowable
-
- /**
- * Logs an object with the specific `Marker` at the given `Level` including the stack trace
- * of the given `Throwable`.
- *
- * @param level the logging level
- * @param marker the marker data specific to this log statement
- * @param message the message to be logged
- * @param cause the cause
- */
- def apply(level: Level, marker: Marker, message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.logMarkerObjectThrowable
-
- /**
- * Logs a `Message` at the given `Level`.
- *
- * @param level the logging level
- * @param message the message to be logged
- */
- def apply(level: Level, message: Message): Unit =
- macro LoggerMacro.logMsg
-
- /**
- * Logs a string at the given `Level`.
- *
- * @param level the logging level
- * @param message the message to be logged
- */
- def apply(level: Level, message: CharSequence): Unit =
- macro LoggerMacro.logCseq
-
- /**
- * Logs an object at the given `Level`.
- *
- * @param level the logging level
- * @param message the message to be logged
- */
- def apply(level: Level, message: AnyRef): Unit =
- macro LoggerMacro.logObject
-
- /**
- * Logs a `Message` at the given `Level` including the stack trace of the given `Throwable`.
- *
- * @param level the logging level
- * @param message the message to be logged
- * @param cause a `Throwable`
- */
- def apply(level: Level, message: Message, cause: Throwable): Unit =
- macro LoggerMacro.logMsgThrowable
-
- /**
- * Logs a string at the given `Level` including the stack trace of the given `Throwable`.
- *
- * @param level the logging level
- * @param message the message to be logged
- * @param cause a `Throwable`
- */
- def apply(level: Level, message: CharSequence, cause: Throwable): Unit =
- macro LoggerMacro.logCseqThrowable
-
- /**
- * Logs an object at the given `Level` including the stack trace of the given `Throwable`.
- *
- * @param level the logging level
- * @param message the message to be logged
- * @param cause a `Throwable`
- */
- def apply(level: Level, message: AnyRef, cause: Throwable): Unit =
- macro LoggerMacro.logObjectThrowable
-
-
- /**
- * Logs entry to a method. Used when the method in question has no parameters or when the parameters should not be
- * logged.
- *
- * @return The built `EntryMessage`
- */
- def traceEntry(): EntryMessage =
- macro LoggerMacro.traceEntry
-
- /**
- * Logs entry to a method along with its parameters.
- *
- * {{{
- * def doSomething(foo: String, bar: Int): Unit = {
- * logger.traceEntry(foo, bar)
- * // do something
- * }
- * }}}
- *
- * @param params the parameters to the method.
- * @return The built `EntryMessage`
- */
- def traceEntry(params: AnyRef*): EntryMessage =
- macro LoggerMacro.traceEntryParams
-
- /**
- * Logs entry to a method using a `Message` to describe the parameters.
- *
- * {{{
- * def doSomething(foo: Request): Unit = {
- * logger.traceEntry(JsonMessage(foo))
- * // do something
- * }
- * }}}
- *
- * @param message the message
- * @return The built `EntryMessage`
- */
- def traceEntry(message: Message): EntryMessage =
- macro LoggerMacro.traceEntryMessage
-
- /**
- * Logs exit from a method with no result.
- */
- def traceExit(): Unit =
- macro LoggerMacro.traceExit
-
- /**
- * Logs exiting from a method with result.
- *
- * @param result The result being returned from the method call
- * @return `result`
- */
- def traceExit[R](result: R): R =
- macro LoggerMacro.traceExitResult[R]
-
- /**
- * Logs exiting from a method with no result.
- *
- * @param entryMessage the `EntryMessage` returned from one of the `traceEntry` methods
- */
- def traceExit(entryMessage: EntryMessage): Unit =
- macro LoggerMacro.traceExitEntryMessage
-
- /**
- * Logs exiting from a method with result.
- *
- * {{{
- * def doSomething(foo: String, bar: Int): Int = {
- * val entryMessage = logger.traceEntry(foo, bar)
- * // do something
- * traceExit(entryMessage, value)
- * }
- * }}}
- *
- * @param entryMessage the `EntryMessage` returned from one of the `traceEntry` methods
- * @param result The result being returned from the method call
- * @return `result`
- */
- def traceExit[R](entryMessage: EntryMessage, result: R): R =
- macro LoggerMacro.traceExitEntryMessageResult[R]
-
- /**
- * Logs exiting from a method with result. Allows custom formatting of the result.
- *
- * @param message the Message containing the formatted result
- * @param result The result being returned from the method call.
- * @return `result`
- */
- def traceExit[R](message: Message, result: R): R =
- macro LoggerMacro.traceExitMessageResult[R]
-
- /**
- * Logs an exception or error to be thrown.
- *
- * {{{
- * throw logger.throwing(myException)
- * }}}
- *
- * @param t the Throwable
- * @return `t`
- */
- def throwing[T <: Throwable](t: T): T =
- macro LoggerMacro.throwing[T]
-
- /**
- * Logs an exception or error to be thrown to a specific logging level.
- *
- * {{{
- * throw logger.throwing(Level.DEBUG, myException)
- * }}}
- *
- * @param level the logging Level.
- * @param t the Throwable
- * @return `t`
- */
- def throwing[T <: Throwable](level: Level, t: T): T =
- macro LoggerMacro.throwingLevel[T]
-
- /**
- * Logs an exception or error that has been caught.
- *
- * @param t the Throwable.
- */
- def catching(t: Throwable): Unit =
- macro LoggerMacro.catching
-
- /**
- * Logs an exception or error that has been caught to a specific logging level.
- *
- * @param level The logging Level.
- * @param t The Throwable.
- */
- def catching(level: Level, t: Throwable): Unit =
- macro LoggerMacro.catchingLevel
-
-
- /** Always logs a message at the specified level. It is the responsibility of the caller to ensure the specified
- * level is enabled.
- *
- * 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.logMessage(Logger.FQCN, level, marker, message, cause)
- }
-
- /** Always logs a message at the specified level. It is the responsibility of the caller to ensure the specified
- * level is enabled.
- *
- * 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: CharSequence, cause: Throwable): Unit = {
- delegate.logMessage(Logger.FQCN, level, marker, delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage(message), cause)
- }
-
- /** Always logs a message at the specified level. It is the responsibility of the caller to ensure the specified
- * level is enabled.
- *
- * 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: AnyRef, cause: Throwable): Unit = {
- delegate.logMessage(Logger.FQCN, level, marker, delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage(message), cause)
- }
-
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/api/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
----------------------------------------------------------------------
diff --git a/api/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala b/api/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
deleted file mode 100644
index 3b54db1..0000000
--- a/api/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala
+++ /dev/null
@@ -1,425 +0,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.
- */
-package org.apache.logging.log4j.scala
-
-import org.apache.logging.log4j.message.{EntryMessage, Message}
-import org.apache.logging.log4j.spi.AbstractLogger
-import org.apache.logging.log4j.{Level, Marker}
-
-import scala.language.experimental.macros
-import scala.reflect.macros.blackbox
-
-/**
- * Inspired from [[https://github.com/typesafehub/scalalogging ScalaLogging]].
- */
-private object LoggerMacro {
-
- type LoggerContext = blackbox.Context { type PrefixType = Logger }
-
-
- def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[Message]) =
- logMarkerMsg(c)(c.universe.reify(Level.FATAL), marker, message)
-
- def fatalMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.FATAL), marker, message)
-
- def fatalMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(c)(c.universe.reify(Level.FATAL), 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 fatalMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.FATAL), marker, message, cause)
-
- def fatalMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 fatalCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.FATAL), message)
-
- def fatalObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 fatalCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.FATAL), message, cause)
-
- def fatalObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 errorMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.ERROR), marker, message)
-
- def errorMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 errorMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.ERROR), marker, message, cause)
-
- def errorMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 errorCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.ERROR), message)
-
- def errorObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 errorCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.ERROR), message, cause)
-
- def errorObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 warnMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.WARN), marker, message)
-
- def warnMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 warnMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.WARN), marker, message, cause)
-
- def warnMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 warnCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.WARN), message)
-
- def warnObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 warnCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.WARN), message, cause)
-
- def warnObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 infoMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.INFO), marker, message)
-
- def infoMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 infoMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.INFO), marker, message, cause)
-
- def infoMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 infoCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.INFO), message)
-
- def infoObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 infoCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.INFO), message, cause)
-
- def infoObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 debugMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.DEBUG), marker, message)
-
- def debugMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 debugMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.DEBUG), marker, message, cause)
-
- def debugMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 debugCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.DEBUG), message)
-
- def debugObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 debugCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.DEBUG), message, cause)
-
- def debugObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 traceMarkerCseq(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- logMarkerCseq(c)(c.universe.reify(Level.TRACE), marker, message)
-
- def traceMarkerObject(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- logMarkerObject(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 traceMarkerCseqThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logMarkerCseqThrowable(c)(c.universe.reify(Level.TRACE), marker, message, cause)
-
- def traceMarkerObjectThrowable(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logMarkerObjectThrowable(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 traceCseq(c: LoggerContext)(message: c.Expr[CharSequence]) =
- logCseq(c)(c.universe.reify(Level.TRACE), message)
-
- def traceObject(c: LoggerContext)(message: c.Expr[AnyRef]) =
- logObject(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 traceCseqThrowable(c: LoggerContext)(message: c.Expr[CharSequence], cause: c.Expr[Throwable]) =
- logCseqThrowable(c)(c.universe.reify(Level.TRACE), message, cause)
-
- def traceObjectThrowable(c: LoggerContext)(message: c.Expr[AnyRef], cause: c.Expr[Throwable]) =
- logObjectThrowable(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 logMarkerCseq(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence]) =
- 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 logMarkerObject(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef]) =
- 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 logMarkerCseqThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[CharSequence], 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 logMarkerObjectThrowable(c: LoggerContext)(level: c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[AnyRef], 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 logCseq(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence]) =
- c.universe.reify(
- if (c.prefix.splice.delegate.isEnabled(level.splice)) {
- c.prefix.splice.logMessage(level.splice, null, message.splice, null)
- }
- )
-
- def logObject(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef]) =
- 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 logCseqThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[CharSequence], 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 logObjectThrowable(c: LoggerContext)(level: c.Expr[Level], message: c.Expr[AnyRef], 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 traceEntry(c: LoggerContext)(): c.Expr[EntryMessage] =
- c.universe.reify(
- c.prefix.splice.delegate.traceEntry()
- )
-
- def traceEntryParams(c: LoggerContext)(params: c.Expr[AnyRef]*): c.Expr[EntryMessage] = {
- import c.universe._
- val isEnabled = Apply(
- Select(Select(c.prefix.tree, TermName("delegate")), TermName("isEnabled")),
- List(
- reify(Level.TRACE).tree,
- reify(AbstractLogger.ENTRY_MARKER).tree,
- reify(null: AnyRef).tree,
- reify(null).tree
- )
- )
-
- val log = Apply(
- Select(Select(c.prefix.tree, TermName("delegate")), TermName("traceEntry")),
- reify(null: String).tree :: (params map (_.tree)).toList
- )
- c.Expr[EntryMessage](If(isEnabled, log, reify(null).tree))
- }
-
-
- def traceEntryMessage(c: LoggerContext)(message: c.Expr[Message]): c.Expr[EntryMessage] =
- c.universe.reify(
- if (c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.ENTRY_MARKER, null: AnyRef, null)) {
- c.prefix.splice.delegate.traceEntry(message.splice) // TODO should not do ifEnabled check
- } else {
- null
- }
- )
-
- def traceExit(c: LoggerContext)(): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit()
- )
-
- def traceExitResult[R: c.WeakTypeTag](c: LoggerContext)(result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(result.splice)
- )
-
- def traceExitEntryMessage(c: LoggerContext)(entryMessage: c.Expr[EntryMessage]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(entryMessage.splice)
- )
-
- def traceExitEntryMessageResult[R: c.WeakTypeTag](c: LoggerContext)(entryMessage: c.Expr[EntryMessage], result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- c.prefix.splice.delegate.traceExit(entryMessage.splice, result.splice)
- )
-
- def traceExitMessageResult[R: c.WeakTypeTag](c: LoggerContext)(message: c.Expr[Message], result: c.Expr[R]): c.Expr[R] =
- c.universe.reify(
- {
- if (message.splice != null && c.prefix.splice.delegate.isEnabled(Level.TRACE, AbstractLogger.EXIT_MARKER, message.splice, null)) {
- c.prefix.splice.delegate.traceExit(message.splice, result.splice) // TODO should not do ifEnabled check
- }
- result.splice
- }
- )
-
- def throwing[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(t: c.Expr[T]): c.Expr[T] =
- c.universe.reify(
- c.prefix.splice.delegate.throwing(t.splice)
- )
-
- def throwingLevel[T <: Throwable: c.WeakTypeTag](c: LoggerContext)(level: c.Expr[Level], t: c.Expr[T]): c.Expr[T] =
- c.universe.reify(
- c.prefix.splice.delegate.throwing(level.splice, t.splice)
- )
-
- def catching(c: LoggerContext)(t: c.Expr[Throwable]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.catching(t.splice)
- )
-
- def catchingLevel(c: LoggerContext)(level: c.Expr[Level], t: c.Expr[Throwable]): c.Expr[Unit] =
- c.universe.reify(
- c.prefix.splice.delegate.catching(level.splice, t.splice)
- )
-
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/api/src/main/scala/org/apache/logging/log4j/scala/Logging.scala
----------------------------------------------------------------------
diff --git a/api/src/main/scala/org/apache/logging/log4j/scala/Logging.scala b/api/src/main/scala/org/apache/logging/log4j/scala/Logging.scala
deleted file mode 100644
index b017de7..0000000
--- a/api/src/main/scala/org/apache/logging/log4j/scala/Logging.scala
+++ /dev/null
@@ -1,30 +0,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.
- */
-package org.apache.logging.log4j.scala
-
-/**
- * Mix in this trait into classes from which you want to log,
- * give you a `logger` value with a [[Logger]] named according to the class.
- */
-trait Logging {
-
- /**
- * A [[Logger]] named according to the class.
- */
- protected val logger: Logger = Logger(getClass)
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/72fe94f7/api/src/main/scala/org/apache/logging/log4j/scala/LoggingContext.scala
----------------------------------------------------------------------
diff --git a/api/src/main/scala/org/apache/logging/log4j/scala/LoggingContext.scala b/api/src/main/scala/org/apache/logging/log4j/scala/LoggingContext.scala
deleted file mode 100644
index 79efecc..0000000
--- a/api/src/main/scala/org/apache/logging/log4j/scala/LoggingContext.scala
+++ /dev/null
@@ -1,84 +0,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.
- */
-package org.apache.logging.log4j.scala
-
-import org.apache.logging.log4j.ThreadContext
-
-import scala.collection.JavaConverters._
-import scala.collection.{immutable, mutable}
-
-/** Manages the context data (context map, MDC) that is added to log events.
- *
- * A wrapper around `org.apache.logging.log4j.ThreadContext`.
- */
-object LoggingContext extends mutable.Map[String, String] {
-
- override def +=(kv: (String, String)): LoggingContext.this.type = {
- ThreadContext.put(kv._1, kv._2)
- this
- }
-
- override def +=(elem1: (String, String), elem2: (String, String), elems: (String, String)*): LoggingContext.this.type = {
- val builder = immutable.Map.newBuilder[String,String]
- builder += elem1
- builder += elem2
- builder ++= elems
- ThreadContext.putAll(builder.result.asJava)
- this
- }
-
- override def ++=(xs: TraversableOnce[(String, String)]): LoggingContext.this.type = {
- ThreadContext.putAll(xs.toMap.asJava)
- this
- }
-
- override def -=(key: String): LoggingContext.this.type = {
- ThreadContext.remove(key)
- this
- }
-
- override def -=(elem1: String, elem2: String, elems: String*): LoggingContext.this.type = {
- val builder = immutable.Seq.newBuilder[String]
- builder += elem1
- builder += elem2
- builder ++= elems
- ThreadContext.removeAll(builder.result.asJava)
- this
- }
-
- override def --=(xs: TraversableOnce[String]): LoggingContext.this.type = {
- ThreadContext.removeAll(xs.toSeq.asJava)
- this
- }
-
- override def clear(): Unit = {
- ThreadContext.clearMap()
- }
-
- override def contains(key: String): Boolean = ThreadContext.containsKey(key)
-
- override def get(key: String): Option[String] = Option(ThreadContext.get(key))
-
- override def iterator: Iterator[(String, String)] = ThreadContext.getImmutableContext.asScala.iterator
-
- override def foreach[U](f: ((String, String)) => U): Unit = ThreadContext.getImmutableContext.asScala.foreach(f)
-
- override def size: Int = ThreadContext.getImmutableContext.size()
-
- override def isEmpty: Boolean = ThreadContext.isEmpty
-
-}
[05/50] [abbrv] logging-log4j-scala git commit: Disable SBT deploy
and add Jenkins artifact archival
Posted by ma...@apache.org.
Disable SBT deploy and add Jenkins artifact archival
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/18068fb1
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/18068fb1
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/18068fb1
Branch: refs/heads/master
Commit: 18068fb1160fb34862d95dfa06adc4d68740c3b5
Parents: 72fe94f
Author: Matt Sicker <bo...@gmail.com>
Authored: Thu Mar 29 11:09:19 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Thu Mar 29 11:09:19 2018 -0500
----------------------------------------------------------------------
Jenkinsfile | 5 +++++
1 file changed, 5 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/18068fb1/Jenkinsfile
----------------------------------------------------------------------
diff --git a/Jenkinsfile b/Jenkinsfile
index 7825a9f..a58a304 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -28,6 +28,7 @@ pipeline {
steps {
ansiColor('xterm') {
sh './sbt -batch "+ compile"'
+ archiveArtifacts artifacts: 'target/**/*.jar', fingerprint: true, onlyIfSuccessful: true
}
}
}
@@ -38,13 +39,17 @@ pipeline {
}
}
}
+ // FIXME: LOG4J2-2291
+ /*
stage('Deploy') {
+ when { branch 'master' }
steps {
ansiColor('xterm') {
sh './sbt -batch "+ publish"'
}
}
}
+ */
}
}
[35/50] [abbrv] logging-log4j-scala git commit: Add links on homepage
Posted by ma...@apache.org.
Add links on homepage
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/d9a1f89b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/d9a1f89b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/d9a1f89b
Branch: refs/heads/master
Commit: d9a1f89b87178674e667fdd1dfe446969da3a694
Parents: cead389
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 20:31:37 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 20:31:37 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/index.adoc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/d9a1f89b/src/asciidoctor/index.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/index.adoc b/src/asciidoctor/index.adoc
index 319b5ee..4ded4de 100644
--- a/src/asciidoctor/index.adoc
+++ b/src/asciidoctor/index.adoc
@@ -17,9 +17,9 @@
= Apache Log4j Scala API
:toc: left
-Log4j Scala API is a Scala logging facade based on Log4j 2.
+Log4j Scala API is a https://www.scala-lang.org/[Scala] logging facade based on https://logging.apache.org/log4j/2.x/[Log4j 2].
Support for Scala versions 2.10, 2.11, and 2.12 are provided, and experimental support for pre-release versions of 2.13 is also provided.
-Log4j Scala API uses Log4j 2.x as its logging backend by default, but this can also be replaced with compatible libraries (e.g., Logback).
+Log4j Scala API uses Log4j 2.x as its logging backend by default, but this can also be replaced with compatible libraries (e.g., https://logback.qos.ch/[Logback]).
While this library is not required to use Log4j API in Scala, it does provide idiomatic Scala APIs which are friendlier to use in Scala programs than the Java APIs.
include::usage.adoc[]
[16/50] [abbrv] logging-log4j-scala git commit: Add scaladocs to site
output
Posted by ma...@apache.org.
Add scaladocs to site output
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/5be05b5e
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/5be05b5e
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/5be05b5e
Branch: refs/heads/master
Commit: 5be05b5e59f9db7f51460562a66ae8b4f3a74a73
Parents: 1f4b789
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 16:36:46 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 16:36:46 2018 -0500
----------------------------------------------------------------------
build.sbt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/5be05b5e/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 5f52ed9..00993c0 100644
--- a/build.sbt
+++ b/build.sbt
@@ -85,7 +85,8 @@ lazy val publishSettings = Seq(
lazy val releaseSettings = Seq(
releaseCrossBuild := true,
- apiURL := Some(url(s"https://logging.apache.org/log4j/scala/log4j-api-scala_${scalaBinaryVersion.value}/scaladocs/"))
+ apiURL := Some(url(s"https://logging.apache.org/log4j/scala/api/${version.value}/")),
+ siteSubdirName in SiteScaladoc := s"api/${version.value}"
)
lazy val apiDependencies = Seq(
@@ -122,6 +123,7 @@ lazy val root = (project in file("."))
.settings(apiDependencies: _*)
.settings(apiInputFiles: _*)
.enablePlugins(AsciidoctorPlugin)
+ .enablePlugins(SiteScaladocPlugin)
// .enablePlugins(SbtOsgi)
// .settings(bundleSettings: _*)
[32/50] [abbrv] logging-log4j-scala git commit: Improve links and
header hierarchy
Posted by ma...@apache.org.
Improve links and header hierarchy
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/a5510391
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/a5510391
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/a5510391
Branch: refs/heads/master
Commit: a551039140608e9f59e3aa7f4e5ed2a937753f19
Parents: a5726de
Author: Matt Sicker <bo...@gmail.com>
Authored: Sat Mar 31 20:22:50 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sat Mar 31 20:22:50 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/usage.adoc | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/a5510391/src/asciidoctor/usage.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/usage.adoc b/src/asciidoctor/usage.adoc
index 93381a4..528e999 100644
--- a/src/asciidoctor/usage.adoc
+++ b/src/asciidoctor/usage.adoc
@@ -16,7 +16,7 @@
////
== Usage
-Using the Scala API is as simple as mixing in the `Logging` trait to your class. Example:
+Using the Scala API is as simple as mixing in the https://logging.apache.org/log4j/scala/log4j-api-scala_2.12/scaladocs/org/apache/logging/log4j/scala/[`Logging`] trait to your class. Example:
[source,scala]
----
@@ -42,21 +42,21 @@ class MyClass extends BaseClass with Logging {
|Scala Version |API Link
|Scala 2.10
-|https://logging.apache.org/log4j/scala/log4j-api-scala_2.10/scaladocs/[ScalaDocs]
+|https://logging.apache.org/log4j/scala/log4j-api-scala_2.10/scaladocs/#org.apache.logging.log4j.scala.package[ScalaDocs]
|Scala 2.11
-|https://logging.apache.org/log4j/scala/log4j-api-scala_2.11/scaladocs/[ScalaDocs]
+|https://logging.apache.org/log4j/scala/log4j-api-scala_2.11/scaladocs/#org.apache.logging.log4j.scala.package[ScalaDocs]
|Scala 2.12
-|https://logging.apache.org/log4j/scala/log4j-api-scala_2.12/scaladocs/[ScalaDocs]
+|https://logging.apache.org/log4j/scala/log4j-api-scala_2.12/scaladocs/org/apache/logging/log4j/scala/[ScalaDocs]
|===
-== Configuration
+=== Configuration
Log4j Scala API uses https://logging.apache.org/log4j/2.x/manual/configuration.html[Log4j configuration] by default.
This supports XML, properties files, and Java-based builders, as well as JSON and YAML with additional dependencies.
-== Substituting Parameters
+=== Substituting Parameters
Unlike in Java, Scala provides native functionality for string interpolation https://docs.scala-lang.org/overviews/core/string-interpolation.html[beginning in Scala 2.10].
As all logger calls are implemented as macros, using string interpolation directly does not require additional if checks.
@@ -67,7 +67,7 @@ For example:
logger.debug(s"Logging in user ${user.getName} with birthday ${user.calcBirthday}")
----
-== Logger Names
+=== Logger Names
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.
[19/50] [abbrv] logging-log4j-scala git commit: Reorganize build.sbt
into better settings categories
Posted by ma...@apache.org.
Reorganize build.sbt into better settings categories
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/d8be0380
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/d8be0380
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/d8be0380
Branch: refs/heads/master
Commit: d8be0380e4e143cdb8e18990a34cfed5770da6d1
Parents: d245e72
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 17:45:16 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 17:45:16 2018 -0500
----------------------------------------------------------------------
build.sbt | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/d8be0380/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 00993c0..39f8ac7 100644
--- a/build.sbt
+++ b/build.sbt
@@ -76,15 +76,26 @@ lazy val publishSettings = Seq(
} yield Credentials("Sonatype Nexus Repository Manager", "repository.apache.org", username, password)
}.toList,
// FIXME: https://github.com/sbt/sbt/issues/3519
- updateOptions := updateOptions.value.withGigahorse(false),
+ updateOptions := updateOptions.value.withGigahorse(false)
+)
+
+lazy val packagingSettings = Seq(
extraResources := Seq(
(baseDirectory.value / "LICENSE.txt", "META-INF/LICENSE"),
(baseDirectory.value / "NOTICE.txt", "META-INF/NOTICE")
- )
+ ),
+ unmanagedSources in Compile := {
+ val Some((_, minor)) = CrossVersion.partialVersion(scalaVersion.value)
+ val extras = if (minor > 10) ((baseDirectory.value / "src" / "main" / "scala-2.11+") ** "*.scala").get else Nil
+ (unmanagedSources in Compile).value ++ extras
+ }
)
lazy val releaseSettings = Seq(
- releaseCrossBuild := true,
+ releaseCrossBuild := true
+)
+
+lazy val siteSettings = Seq(
apiURL := Some(url(s"https://logging.apache.org/log4j/scala/api/${version.value}/")),
siteSubdirName in SiteScaladoc := s"api/${version.value}"
)
@@ -101,14 +112,6 @@ lazy val apiDependencies = Seq(
)
)
-lazy val apiInputFiles = Seq(
- unmanagedSources in Compile := {
- val Some((_, minor)) = CrossVersion.partialVersion(scalaVersion.value)
- val extras = if (minor > 10) ((baseDirectory.value / "src" / "main" / "scala-2.11+") ** "*.scala").get else Nil
- (unmanagedSources in Compile).value ++ extras
- }
-)
-
//lazy val bundleSettings = osgiSettings ++ Seq(
// bundleSymbolicName := "org.apache.logging.log4j.scala",
// exportPackage := Seq("org.apache.logging.log4j.scala")
@@ -119,9 +122,10 @@ lazy val root = (project in file("."))
.settings(metadataSettings: _*)
.settings(compileSettings: _*)
.settings(publishSettings: _*)
+ .settings(packagingSettings: _*)
.settings(releaseSettings: _*)
+ .settings(siteSettings: _*)
.settings(apiDependencies: _*)
- .settings(apiInputFiles: _*)
.enablePlugins(AsciidoctorPlugin)
.enablePlugins(SiteScaladocPlugin)
// .enablePlugins(SbtOsgi)
[43/50] [abbrv] logging-log4j-scala git commit: Remove obsolete files
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/js/prettify.min.js
----------------------------------------------------------------------
diff --git a/src/site/resources/js/prettify.min.js b/src/site/resources/js/prettify.min.js
deleted file mode 100644
index 6623601..0000000
--- a/src/site/resources/js/prettify.min.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2006 Google Inc.
-//
-// Licensed 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.
-var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
-(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
-[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
-f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
-(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
-{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
-t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
-"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
-l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
-q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
-q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
-"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
-a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
-for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
-m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
-a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
-j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
-"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
-H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
-J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
-I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
-["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
-/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
-["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
-hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
-!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
-250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
-PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/resources/js/site.js
----------------------------------------------------------------------
diff --git a/src/site/resources/js/site.js b/src/site/resources/js/site.js
deleted file mode 100644
index 2e4dd02..0000000
--- a/src/site/resources/js/site.js
+++ /dev/null
@@ -1,106 +0,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.
-*/
-
-/* Executed on page load. */
-$(document).ready(function() {
-
- //
- // This is a hack to enable google-code-prettify to work with maven.
- //
- // The problem is that maven, when building the site, replaces:
- // <pre class="prettyprint">...</pre>
- // with:
- // <div class="prettyprint"><pre>...</pre></div>
- //
- // Effectively, it removes the class parameter from the <pre> element, which
- // is required for google-code-prettify to work.
- //
- // This hack restores the class of all <pre> elements which are the child of
- // a <div class="prettyprint">.
- //
- $('pre').each(function() {
- var parent = $(this).parent();
-
- if (parent.hasClass('prettyprint')) {
- parent.removeClass('prettyprint');
- $(this).addClass('prettyprint');
- }
-
- if (parent.hasClass('linenums')) {
- parent.removeClass('linenums');
- $(this).addClass('linenums');
- }
- })
-
- // Hack to add default visuals to tables
- $('table').each(function() {
- if ($(this).hasClass('bodyTable')) {
-
- // Remove border="1" which is added by maven
- this.border = 0;
-
- // Add bootstrap table styling
- $(this).addClass('table table-striped table-bordered');
- }
- });
-
- // Render tabs
- $('.auto-tabs').each(function(groupid) {
-
- // Find tab bar
- $(this).find('ul').each(function() {
-
- // Add styling
- $(this).addClass('nav nav-tabs');
-
- // Go tab bar items
- $(this).find('li').each(function(itemid) {
-
- // Set first tab as active
- if (itemid == 0) {
- $(this).addClass('active');
- }
-
- // Replace text with a link to tab contents
- var name = $(this).html();
- var link = $('<a>')
- .attr('href', '#' + 'tab-' + groupid + '-' + itemid)
- .attr('data-toggle', 'tab')
- .html(name);
- $(this).html(link);
- });
- });
-
- // Find tab contents
- $(this).find('.tab-content .tab-pane').each(function(itemid) {
-
- // Set first tab as active
- if (itemid == 0) {
- $(this).addClass('active');
- }
-
- // Set the tab id
- $(this).attr('id', 'tab-' + groupid + '-' + itemid);
- });
- });
-
- // Make external links open in new tab
- $('a.external').attr('target', '_blank');
-
- // Trigger prettyprint
- prettyPrint();
-});
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/site.vm
----------------------------------------------------------------------
diff --git a/src/site/site.vm b/src/site/site.vm
deleted file mode 100644
index a5659ac..0000000
--- a/src/site/site.vm
+++ /dev/null
@@ -1,515 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--
- 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.
--->
-<!-- Generated by Apache Maven Doxia at $dateFormat.format( $currentDate ) -->
-#macro ( link $href $name $target $img $position $alt $border $width $height )
- #set ( $linkTitle = ' title="' + $name + '"' )
- #if( $target )
- #set ( $linkTarget = ' target="' + $target + '"' )
- #else
- #set ( $linkTarget = "" )
- #end
- #if ( $href.toLowerCase().startsWith("http:/") || $href.toLowerCase().startsWith("https:/") ||
- $href.toLowerCase().startsWith("ftp:/") || $href.toLowerCase().startsWith("mailto:/") ||
- $href.toLowerCase().startsWith("file:/") || ($href.toLowerCase().indexOf("://") != -1) )
- #set ( $linkClass = ' class="external" target="_blank"' )
-
- #if ( $linkTarget )
- #else
- #set ( $linkTarget = "_blank" )
- #end
-
- #else
- #set ( $linkClass = "" )
- #end
- #if ( $img )
- #if ( $position == "left" )
- <a href="$href"$linkClass$linkTarget$linkTitle>#image($img $alt $border $width $height)$name</a>
- #else
- <a href="$href"$linkClass$linkTarget$linkTitle>$name #image($img $alt $border $width $height)</a>
- #end
- #else
- <a href="$href"$linkClass$linkTarget$linkTitle>$name</a>
- #end
-#end
-##
-#macro ( image $img $alt $border $width $height )
- #if( $img )
- #if ( ! ( $img.toLowerCase().startsWith("http:/") || $img.toLowerCase().startsWith("https:/") ||
- $img.toLowerCase().startsWith("ftp:/") || $img.toLowerCase().startsWith("mailto:/") ||
- $img.toLowerCase().startsWith("file:/") || ($img.toLowerCase().indexOf("://") != -1) ) )
- #set ( $imgSrc = $PathTool.calculateLink( $img, $relativePath ) )
- #set ( $imgSrc = $imgSrc.replaceAll( '\\', '/' ) )
- #set ( $imgSrc = ' src="' + $imgSrc + '"' )
- #else
- #set ( $imgSrc = ' src="' + $img + '"' )
- #end
- #if( $alt )
- #set ( $imgAlt = ' alt="' + $alt + '"' )
- #else
- #set ( $imgAlt = ' alt=""' )
- #end
- #if( $border )
- #set ( $imgBorder = ' border="' + $border + '"' )
- #else
- #set ( $imgBorder = "" )
- #end
- #if( $width )
- #set ( $imgWidth = ' width="' + $width + '"' )
- #else
- #set ( $imgWidth = "" )
- #end
- #if( $height )
- #set ( $imgHeight = ' height="' + $height + '"' )
- #else
- #set ( $imgHeight = "" )
- #end
- <img class="imageLink"$imgSrc$imgAlt$imgBorder$imgWidth$imgHeight/>
- #end
-#end
-#macro ( banner $banner $id )
- #if ( $banner )
- #if( $banner.href )
- #set ( $hrf = $banner.href )
- #if ( ! ( $hrf.toLowerCase().startsWith("http:/") || $hrf.toLowerCase().startsWith("https:/") ||
- $hrf.toLowerCase().startsWith("ftp:/") || $hrf.toLowerCase().startsWith("mailto:/") ||
- $hrf.toLowerCase().startsWith("file:/") || ($hrf.toLowerCase().indexOf("://") != -1) ) )
- #set ( $hrf = $PathTool.calculateLink( $hrf, $relativePath ) )
- #set ( $hrf = $hrf.replaceAll( '\\', '/' ) )
- #if ( ( $hrf == '' ) )
- #set ( $hrf = './' )
- #end
- #end
- <a href="$hrf" id="$id"#if( $banner.alt ) title="$banner.alt"#end>
- #else
- <div id="$id">
- #end
-##
- #if( $banner.src )
- #set ( $src = $banner.src )
- #if ( ! ( $src.toLowerCase().startsWith("http:/") || $src.toLowerCase().startsWith("https:/") ||
- $src.toLowerCase().startsWith("ftp:/") || $src.toLowerCase().startsWith("mailto:/") ||
- $src.toLowerCase().startsWith("file:/") || ($src.toLowerCase().indexOf("://") != -1) ) )
- #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
- #set ( $src = $src.replaceAll( '\\', '/' ) )
- #end
- #if ( $banner.alt )
- #set ( $alt = $banner.alt )
- #else
- #set ( $alt = $banner.name )
- #end
- <img src="$src" alt="$alt" />
- #else
- $banner.name
- #end
-##
- #if( $banner.href )
- </a>
- #else
- </div>
- #end
- #end
-#end
-##
-#macro ( links $links )
- <ul class="nav">
- #set ( $counter = 0 )
- #foreach( $item in $links )
- #set ( $counter = $counter + 1 )
- #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
- #set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
- #set ( $activeClass = "" )
- #if ( $alignedFileName == $currentItemHref)
- #set ( $activeClass = ' class="active"' )
- #end
- <li$activeClass>
- #link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
- </li>
- #end
- </ul>
-#end
-##
-#macro ( breadcrumbs $breadcrumbs )
- #foreach( $item in $breadcrumbs )
- #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
- #set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
- #if ( ( $currentItemHref == '' ) )
- #set ( $currentItemHref = './' )
- #end
-##
- #link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
- <span class="divider">></span>
- #end
- $title
-#end
-##
-#macro ( displayTree $display $item )
- #if ( $item && $item.items && $item.items.size() > 0 )
- #foreach( $subitem in $item.items )
- #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) )
- #set ( $subitemHref = $subitemHref.replaceAll( '\\', '/' ) )
-##
- #if ( $alignedFileName == $subitemHref )
- #set ( $display = true )
- #end
-##
- #displayTree( $display $subitem )
- #end
- #end
-#end
-##
-#macro ( menuItem $item $isComponentDocumentation )
- #set ( $collapse = "none" )
- #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
- #set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
-##
- #if ( $item && $item.items && $item.items.size() > 0 )
- #if ( $item.collapse == false )
- #set ( $collapse = "expanded" )
- #else
- ## By default collapsed
- #set ( $collapse = "collapsed" )
- #end
-##
- #set ( $display = false )
- #displayTree( $display $item )
-##
- #if ( $alignedFileName == $currentItemHref || $display )
- #set ( $collapse = "expanded" )
- #end
- #end
- #set ( $active = "" )
- #if ( $alignedFileName == $currentItemHref )
- #set ($active = " active")
- #end
- #set ( $thisProjectDir = "../${project.artifactId}" )
- #if ($thisProjectDir == $PathTool.getDirectoryComponent( $item.href ))
- #set ($active = " active")
- #end
- #if (${project.artifactId} != "log4j" && $isComponentDocumentation &&
- ($item.href == "team-list.html" || $item.href == "mail-lists.html"
- || $item.href == "issue-tracking.html" || $item.href == "license.html"
- || $item.href == "source-repository.html"))
- <!-- Removing overall project item $item.name from component-specific menu -->
- #else
- #set ($thisItemName = $item.name)
- #if (${project.artifactId} != "log4j" && $isComponentDocumentation )
- #set ($thisItemName = $item.name.replace("Project Information", "Component Project"))
- #set ($thisItemName = $item.name.replace("Project", "Component"))
- #end
- <li class="$collapse$active">
- #link($currentItemHref $thisItemName $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
- #if ( $item && $item.items && $item.items.size() > 0 )
- #if ( $collapse == "expanded" )
- <ul>
- #foreach( $subitem in $item.items )
- #menuItem( $subitem $isComponentDocumentation )
- #end
- </ul>
- #end
- #end
- </li>
- #end
-#end
-##
-#macro ( mainMenu $menus )
- #foreach( $menu in $menus )
- <ul class="nav nav-list">
- #set ($isComponentDocumentation = false)
- #if ( $menu.name )
- #set ( $menuName = $menu.name )
- #if ( $menuName == "Project Documentation" )
- #set ( $menuName = "Component Documentation" )
- #set ($isComponentDocumentation = true)
- #end
- #if ( $menu.img )
- <li class="nav-header"><i class="$menu.img"></i>$menuName</li>
- #else
- <li class="nav-header">$menuName</li>
- #end
- #end
- #if ( $menu.items && $menu.items.size() > 0 )
- #foreach( $item in $menu.items )
- #menuItem( $item $isComponentDocumentation )
- #end
- #end
- </ul>
- #end
-#end
-##
-#macro ( copyright )
- #if ( $project )
- #if ( ${project.organization} && ${project.organization.name} )
- #set ( $period = "" )
- #else
- #set ( $period = "." )
- #end
-##
- #set ( $currentYear = ${currentDate.year} + 1900 )
-##
- #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
- ${project.inceptionYear}-${currentYear}${period}
- #else
- ${currentYear}${period}
- #end
-##
- #if ( ${project.organization} )
- #if ( ${project.organization.name} && ${project.organization.url} )
- <a href="$project.organization.url">${project.organization.name}</a>.
- #elseif ( ${project.organization.name} )
- ${project.organization.name}.
- #end
- #end
- #end
-#end
-##
-#macro ( publishDate $position $publishDate $version )
- #if ( $publishDate && $publishDate.format )
- #set ( $format = $publishDate.format )
- #else
- #set ( $format = "yyyy-MM-dd" )
- #end
-##
- $dateFormat.applyPattern( $format )
-##
- #set ( $dateToday = $dateFormat.format( $currentDate ) )
-##
- #if ( $publishDate && $publishDate.position )
- #set ( $datePosition = $publishDate.position )
- #else
- #set ( $datePosition = "left" )
- #end
-##
- #if ( $version )
- #if ( $version.position )
- #set ( $versionPosition = $version.position )
- #else
- #set ( $versionPosition = "left" )
- #end
- #else
- #set ( $version = "" )
- #set ( $versionPosition = "left" )
- #end
-##
- #set ( $breadcrumbs = $decoration.body.breadcrumbs )
- #set ( $links = $decoration.body.links )
-
- #if ( $datePosition.equalsIgnoreCase( $position ) )
- #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
- <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
- #if ( $versionPosition.equalsIgnoreCase( $position ) )
- <span class="divider">|</span> <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
- #end
- #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
- <div id="lastPublished">
- <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
- #if ( $versionPosition.equalsIgnoreCase( $position ) )
- <span class="divider">|</span> <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
- #end
- </div>
- #elseif ( $datePosition.equalsIgnoreCase("left") )
- <div class="pull-left">
- <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
- #if ( $versionPosition.equalsIgnoreCase( $position ) )
- <span class="divider">|</span> <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
- #end
- #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
- <span class="divider">|</span> #breadcrumbs( $breadcrumbs )
- #end
- </div>
- #end
- #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
- #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
- $prefix <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
- #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
- <div id="lastPublished">
- <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
- </div>
- #elseif ( $versionPosition.equalsIgnoreCase("left") )
- <div class="pull-left">
- <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
- #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
- <span class="divider">|</span> #breadcrumbs( $breadcrumbs )
- #end
- </div>
- #end
- #elseif ( $position.equalsIgnoreCase( "left" ) )
- #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
- <div class="pull-left">
- #breadcrumbs( $breadcrumbs )
- </div>
- #end
- #end
-#end
-##
-#macro ( poweredByLogo $poweredBy )
- #if( $poweredBy )
- #foreach ($item in $poweredBy)
- #if( $item.href )
- #set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) )
- #set ( $href = $href.replaceAll( '\\', '/' ) )
- #else
- #set ( $href="http://maven.apache.org/" )
- #end
-##
- #if( $item.name )
- #set ( $name = $item.name )
- #else
- #set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" ) )
- #set ( $name = "${name} Maven" )
- #end
-##
- #if( $item.img )
- #set ( $img = $item.img )
- #else
- #set ( $img = "images/maven-feather.png" )
- #end
-##
- #if ( ! ( $img.toLowerCase().startsWith("http:/") || $img.toLowerCase().startsWith("https:/") ||
- $img.toLowerCase().startsWith("ftp:/") || $img.toLowerCase().startsWith("mailto:/") ||
- $img.toLowerCase().startsWith("file:/") || ($img.toLowerCase().indexOf("://") != -1) ) )
- #set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
- #set ( $img = $img.replaceAll( '\\', '/' ) )
- #end
-##
- #if( $item.alt )
- #set ( $alt = ' alt="' + $item.alt + '"' )
- #else
- #set ( $alt = ' alt="' + $name + '"' )
- #end
-##
- #if( $item.border )
- #set ( $border = ' border="' + $item.border + '"' )
- #else
- #set ( $border = "" )
- #end
-##
- #if( $item.width )
- #set ( $width = ' width="' + $item.width + '"' )
- #else
- #set ( $width = "" )
- #end
- #if( $item.height )
- #set ( $height = ' height="' + $item.height + '"' )
- #else
- #set ( $height = "" )
- #end
-##
- <a href="$href" title="$name" class="poweredBy">
- <img class="poweredBy" $alt src="$img" $border $width $height />
- </a>
- #end
- #if( $poweredBy.isEmpty() )
- <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
- <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/maven-feather.png" />
- </a>
- #end
- #else
- <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
- <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/maven-feather.png" />
- </a>
- #end
-#end
-##
-#macro ( googleAnalytics $accountId )
- #if( $accountId && $accountId != "" )
- <!-- Google Analytics -->
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', '$accountId']);
- _gaq.push (['_gat._anonymizeIp']);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
- #end
-#end
-##
-<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
- <title>$title - $project.name</title>
- <link rel="stylesheet" href="$relativePath/css/bootstrap.min.css" type="text/css" />
- <link rel="stylesheet" href="$relativePath/css/site.css" type="text/css" />
- <script type="text/javascript" src="$relativePath/js/jquery.min.js"></script>
- <script type="text/javascript" src="$relativePath/js/bootstrap.min.js"></script>
- <script type="text/javascript" src="$relativePath/js/prettify.min.js"></script>
- <script type="text/javascript" src="$relativePath/js/site.js"></script>
-#foreach( $author in $authors )
- <meta name="author" content="$author" />
-#end
-#if ( $dateCreation )
- <meta name="Date-Creation-yyyymmdd" content="$dateCreation" />
-#end
-#if ( $dateRevision )
- <meta name="Date-Revision-yyyymmdd" content="$dateRevision" />
-#end
-#if ( $locale )
- <meta http-equiv="Content-Language" content="$locale.language" />
-#end
- $headContent
- #googleAnalytics( $decoration.googleAnalyticsAccountId )
- </head>
- <body class="composite">
- <a href="https://logging.apache.org/">
- <img class="logo-left" src="$relativePath/images/ls-logo.jpg" alt="Apache logging services logo" />
- </a>
- <img class="logo-right" src="$relativePath/images/logo.png" alt="Apache log4j logo" />
- <div class="clear"></div>
-
- <div class="navbar">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="brand" href="$project.url">$project.name ™</a>
- #links( $decoration.body.links )
- </div>
- </div>
- </div>
-
- <div class="container-fluid">
- <table class="layout-table">
- <tr>
- <td class="sidebar">
- <div class="well sidebar-nav">
- #mainMenu( $decoration.body.menus )
- </div>
- <div id="poweredBy">
- #poweredByLogo( $decoration.poweredBy )
- </div>
- </td>
- <td class="content">
- $bodyContent
- </td>
- </tr>
- </table>
- </div>
-
- <div class="footer">
- #set ( $currentYear = ${currentDate.year} + 1900 )
- <p>Copyright © ${project.inceptionYear}-${currentYear} <a class="external" href="$project.organization.url">${project.organization.name}</a>. All Rights Reserved.</p>
- <p>Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.</p>
- <p>Site powered by <a class="external" href="http://getbootstrap.com/">Twitter Bootstrap</a>. Icons from <a class="external" href="http://glyphicons.com/">Glyphicons Free</a>.</p>
- </div>
- </div>
- </body>
-</html>
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/be2e32be/src/site/site.xml
----------------------------------------------------------------------
diff --git a/src/site/site.xml b/src/site/site.xml
deleted file mode 100644
index 2486fcf..0000000
--- a/src/site/site.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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 name="Log4j Scala API"
- xmlns="http://maven.apache.org/DECORATION/1.7.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd">
- <!-- this file is a placeholder as the root of the actual site is in logging-log4j2 -->
- <body>
- <links>
- <item name="Apache" href="http://www.apache.org/"/>
- <item name="Logging Services" href="http://logging.apache.org/"/>
- </links>
- <menu ref="reports"/>
- </body>
-</project>
\ No newline at end of file
[50/50] [abbrv] logging-log4j-scala git commit: LOG4J2-1882: Migrate
to sbt
Posted by ma...@apache.org.
LOG4J2-1882: Migrate to sbt
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/b5ff1c75
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/b5ff1c75
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/b5ff1c75
Branch: refs/heads/master
Commit: b5ff1c75185001db1ee1c9db2ba91ed557b44f7d
Parents: ffcbc03
Author: Matt Sicker <bo...@gmail.com>
Authored: Tue Apr 3 16:06:14 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Tue Apr 3 16:06:14 2018 -0500
----------------------------------------------------------------------
src/asciidoctor/changes.adoc | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/b5ff1c75/src/asciidoctor/changes.adoc
----------------------------------------------------------------------
diff --git a/src/asciidoctor/changes.adoc b/src/asciidoctor/changes.adoc
index 6682e8c..a2b991c 100644
--- a/src/asciidoctor/changes.adoc
+++ b/src/asciidoctor/changes.adoc
@@ -21,13 +21,14 @@
[vertical]
New Features::
[horizontal]
+LOG4J2-1882::: Migrate log4j-api-scala to sbt.
LOG4J2-2303::: Add release distribution script.
LOG4J2-2295::: Add OSGi metadata to release jars.
LOG4J2-2294::: Add release audit information to build.
LOG4J2-2298::: Add changelog to site.
-LOG4J2-2293::: Add required license files to SBT output artifacts.
+LOG4J2-2293::: Add required license files to sbt output artifacts.
LOG4J2-2296::: Add sbt-site plugin and website configuration.
-LOG4J2-2291::: Add Jenkins pipeline for SBT build.
+LOG4J2-2291::: Add Jenkins pipeline for sbt build.
[vertical]
Bug Fixes:: None.
[09/50] [abbrv] logging-log4j-scala git commit: LOG4J2-2290: Update
Log4j from 2.9.1 to 2.11.0
Posted by ma...@apache.org.
LOG4J2-2290: Update Log4j from 2.9.1 to 2.11.0
Previously committed the project/Dependencies.scala with this upgraded version already.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/722c1f5b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/722c1f5b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/722c1f5b
Branch: refs/heads/master
Commit: 722c1f5bdd814fff4337a485111a711dd4b0f5c1
Parents: b510c12
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Mar 30 13:16:21 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Mar 30 13:16:21 2018 -0500
----------------------------------------------------------------------
src/changes/changes.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/722c1f5b/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 1bf5182..0458f58 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -30,7 +30,10 @@
- "update" - Change
- "remove" - Removed
-->
- <release version="12.0.0" date="2017-MM-DD" description="GA Release 12.0.0">
+ <release version="11.1" date="2018-MM-DD" description="GA Release 11.1">
+ <action issue="LOG4J2-2290" dev="mattsicker" type="update">
+ Update Log4j from 2.9.1 to 2.11.0.
+ </action>
<action issue="LOG4J2-1995" dev="ggregory" type="update">
Update log4j-api-scala_2.11 from Scala 2.11.8 to 2.11.11.
</action>
[41/50] [abbrv] logging-log4j-scala git commit: Move sample module
into sbt project
Posted by ma...@apache.org.
Move sample module into sbt project
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/commit/94faa798
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/tree/94faa798
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/diff/94faa798
Branch: refs/heads/master
Commit: 94faa7984a5df8d4e6ab1c8dba37c420bbe6d361
Parents: 59f47b8
Author: Matt Sicker <bo...@gmail.com>
Authored: Mon Apr 2 15:31:59 2018 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Mon Apr 2 15:31:59 2018 -0500
----------------------------------------------------------------------
build.sbt | 33 ++++----
log4j-api-scala-sample/pom.xml | 82 --------------------
.../src/main/resources/log4j2.xml | 32 --------
.../logging/log4j/scala/sample/LoggingApp.scala | 54 -------------
.../src/site/markdown/index.md | 20 -----
log4j-api-scala-sample/src/site/site.xml | 30 -------
project/Dependencies.scala | 1 +
sample/src/main/resources/log4j2.xml | 32 ++++++++
.../logging/log4j/scala/sample/LoggingApp.scala | 54 +++++++++++++
9 files changed, 102 insertions(+), 236 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 5bb6b15..9398b25 100644
--- a/build.sbt
+++ b/build.sbt
@@ -127,23 +127,20 @@ lazy val root = (project in file("."))
.enablePlugins(SbtOsgi)
.settings(bundleSettings: _*)
-//lazy val nopublish = Seq(
-// publish := {},
-// publishLocal := {},
-// publishM2 := {},
-// skip in publish := true
-//)
+lazy val nopublish = Seq(
+ publish := {},
+ publishLocal := {},
+ publishM2 := {},
+ skip in publish := true
+)
-//lazy val sample = (project in file("sample"))
-// .settings(metadataSettings: _*)
-// .settings(nopublish: _*)
-// .settings(
-// name := "log4j-api-scala-sample",
-// scalaVersion := scala212,
-// libraryDependencies := Seq(
-// "org.apache.logging.log4j" % "log4j-api" % log4j,
-// "org.apache.logging.log4j" % "log4j-core" % log4j % Runtime
-// )
-// )
-// .dependsOn(root)
+lazy val sample = (project in file("sample"))
+ .settings(metadataSettings: _*)
+ .settings(compileSettings: _*)
+ .settings(nopublish: _*)
+ .settings(
+ name := "log4j-api-scala-sample",
+ libraryDependencies := Seq(log4jApi, log4jCore)
+ )
+ .dependsOn(root)
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/log4j-api-scala-sample/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-api-scala-sample/pom.xml b/log4j-api-scala-sample/pom.xml
deleted file mode 100644
index 2f8b97b..0000000
--- a/log4j-api-scala-sample/pom.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?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.
--->
-<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-scala</artifactId>
- <version>12.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <artifactId>log4j-api-scala-sample</artifactId>
- <packaging>jar</packaging>
- <name>Scala API samples</name>
- <url>http://http://logging.apache.org/log4j/2.x/</url>
- <properties>
- <scala.version>2.12.4</scala.version>
- <scala.maven.plugin.version>3.3.1</scala.maven.plugin.version>
- <log4jParentDir>${basedir}/..</log4jParentDir>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-scala_2.12</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <scope>runtime</scope>
- </dependency>
- </dependencies>
- <build>
- <sourceDirectory>src/main/scala</sourceDirectory>
- <plugins>
- <plugin>
- <groupId>net.alchim31.maven</groupId>
- <artifactId>scala-maven-plugin</artifactId>
- <version>${scala.maven.plugin.version}</version>
- <executions>
- <execution>
- <goals>
- <goal>compile</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <args>
- <arg>-feature</arg>
- <arg>-unchecked</arg>
- <arg>-deprecation</arg>
- </args>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>exec-maven-plugin</artifactId>
- <version>1.5.0</version>
- <configuration>
- <mainClass>org.apache.logging.log4j.scala.sample.LoggingApp</mainClass>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-</project>
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/log4j-api-scala-sample/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/log4j-api-scala-sample/src/main/resources/log4j2.xml b/log4j-api-scala-sample/src/main/resources/log4j2.xml
deleted file mode 100644
index 1c8703b..0000000
--- a/log4j-api-scala-sample/src/main/resources/log4j2.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
-
--->
-<Configuration name="ScalaApiSample" status="error">
- <Appenders>
- <Console name="Console">
- <PatternLayout>
- <Pattern>%d [%X{correlationId}] %5p %c{1} %X %F:%L - %m%n</Pattern>
- </PatternLayout>
- </Console>
- </Appenders>
- <Loggers>
- <Root level="TRACE">
- <AppenderRef ref="Console"/>
- </Root>
- </Loggers>
-</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/log4j-api-scala-sample/src/main/scala/org/apache/logging/log4j/scala/sample/LoggingApp.scala
----------------------------------------------------------------------
diff --git a/log4j-api-scala-sample/src/main/scala/org/apache/logging/log4j/scala/sample/LoggingApp.scala b/log4j-api-scala-sample/src/main/scala/org/apache/logging/log4j/scala/sample/LoggingApp.scala
deleted file mode 100644
index c071673..0000000
--- a/log4j-api-scala-sample/src/main/scala/org/apache/logging/log4j/scala/sample/LoggingApp.scala
+++ /dev/null
@@ -1,54 +0,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.
- */
-package org.apache.logging.log4j.scala.sample
-
-import java.util.UUID
-
-import org.apache.logging.log4j.Level
-import org.apache.logging.log4j.message.MessageFactory2
-import org.apache.logging.log4j.scala.{Logging, LoggingContext}
-
-object LoggingApp extends App with Logging {
-
- val s1 = "foo"
- val s2 = "bar"
- val t = new RuntimeException("error")
-
- logger.info(s"Hello, world: $s1 $s2")
-
- logger.traceEntry()
- logger.traceEntry(s1, s2)
- val entryMessage = logger.traceEntry(logger.delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage("foobar": CharSequence))
-
- logger.traceExit()
- logger.traceExit(s2)
- logger.traceExit(entryMessage)
- logger.traceExit(entryMessage, s2)
- logger.traceExit(logger.delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage("bonsai": CharSequence), s2)
-
- logger.throwing(t)
- logger.throwing(Level.INFO, t)
-
- logger.catching(t)
- logger.catching(Level.INFO, t)
-
- LoggingContext("correlationId") = UUID.randomUUID().toString
- logger.info("Logging with a correlation ID set")
- LoggingContext.clear()
- logger.info("Logging without the correlation ID")
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/log4j-api-scala-sample/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/log4j-api-scala-sample/src/site/markdown/index.md b/log4j-api-scala-sample/src/site/markdown/index.md
deleted file mode 100644
index cd207b8..0000000
--- a/log4j-api-scala-sample/src/site/markdown/index.md
+++ /dev/null
@@ -1,20 +0,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.
--->
-# Log4j Scala API Sample
-
-This project demonstrates sample usage of Log4j Scala API. The source code is
-provided for Scala 2.12, but the API works the same in Scala 2.11 and 2.10.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/log4j-api-scala-sample/src/site/site.xml
----------------------------------------------------------------------
diff --git a/log4j-api-scala-sample/src/site/site.xml b/log4j-api-scala-sample/src/site/site.xml
deleted file mode 100644
index f46fa51..0000000
--- a/log4j-api-scala-sample/src/site/site.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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 name="Log4j Scala API"
- xmlns="http://maven.apache.org/DECORATION/1.7.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd">
- <body>
- <links>
- <item name="Apache" href="http://www.apache.org/"/>
- <item name="Logging Services" href="http://logging.apache.org/"/>
- <item name="Log4j" href="../index.html"/>
- </links>
- <menu ref="reports"/>
- </body>
-</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/project/Dependencies.scala
----------------------------------------------------------------------
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 93b3aff..7321de4 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -29,6 +29,7 @@ object Dependencies {
private val log4jV = "2.11.0"
val log4jApi = "org.apache.logging.log4j" % "log4j-api" % log4jV
val log4jApiTests = "org.apache.logging.log4j" % "log4j-api" % log4jV % Test classifier "tests"
+ val log4jCore = "org.apache.logging.log4j" % "log4j-core" % log4jV % Runtime
val junit = "junit" % "junit" % "4.12" % Test
val scalatest = "org.scalatest" %% "scalatest" % "3.0.4" % Test
val mockito = "org.mockito" % "mockito-core" % "1.10.19" % Test
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/sample/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/sample/src/main/resources/log4j2.xml b/sample/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..1c8703b
--- /dev/null
+++ b/sample/src/main/resources/log4j2.xml
@@ -0,0 +1,32 @@
+<?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.
+
+-->
+<Configuration name="ScalaApiSample" status="error">
+ <Appenders>
+ <Console name="Console">
+ <PatternLayout>
+ <Pattern>%d [%X{correlationId}] %5p %c{1} %X %F:%L - %m%n</Pattern>
+ </PatternLayout>
+ </Console>
+ </Appenders>
+ <Loggers>
+ <Root level="TRACE">
+ <AppenderRef ref="Console"/>
+ </Root>
+ </Loggers>
+</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j-scala/blob/94faa798/sample/src/main/scala/org/apache/logging/log4j/scala/sample/LoggingApp.scala
----------------------------------------------------------------------
diff --git a/sample/src/main/scala/org/apache/logging/log4j/scala/sample/LoggingApp.scala b/sample/src/main/scala/org/apache/logging/log4j/scala/sample/LoggingApp.scala
new file mode 100644
index 0000000..c071673
--- /dev/null
+++ b/sample/src/main/scala/org/apache/logging/log4j/scala/sample/LoggingApp.scala
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.scala.sample
+
+import java.util.UUID
+
+import org.apache.logging.log4j.Level
+import org.apache.logging.log4j.message.MessageFactory2
+import org.apache.logging.log4j.scala.{Logging, LoggingContext}
+
+object LoggingApp extends App with Logging {
+
+ val s1 = "foo"
+ val s2 = "bar"
+ val t = new RuntimeException("error")
+
+ logger.info(s"Hello, world: $s1 $s2")
+
+ logger.traceEntry()
+ logger.traceEntry(s1, s2)
+ val entryMessage = logger.traceEntry(logger.delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage("foobar": CharSequence))
+
+ logger.traceExit()
+ logger.traceExit(s2)
+ logger.traceExit(entryMessage)
+ logger.traceExit(entryMessage, s2)
+ logger.traceExit(logger.delegate.getMessageFactory.asInstanceOf[MessageFactory2].newMessage("bonsai": CharSequence), s2)
+
+ logger.throwing(t)
+ logger.throwing(Level.INFO, t)
+
+ logger.catching(t)
+ logger.catching(Level.INFO, t)
+
+ LoggingContext("correlationId") = UUID.randomUUID().toString
+ logger.info("Logging with a correlation ID set")
+ LoggingContext.clear()
+ logger.info("Logging without the correlation ID")
+
+}
\ No newline at end of file