You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2015/06/13 22:37:14 UTC

logging-log4j2 git commit: [LOG4J2-767] New module for Liquibase integration.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 05b236239 -> 4df0d3943


[LOG4J2-767] New module for Liquibase integration.

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4df0d394
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4df0d394
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4df0d394

Branch: refs/heads/master
Commit: 4df0d3943da873de043d68cb9ea114fb4f22c784
Parents: 05b2362
Author: Gary Gregory <ga...@gmail.com>
Authored: Sat Jun 13 13:37:08 2015 -0700
Committer: Gary Gregory <ga...@gmail.com>
Committed: Sat Jun 13 13:37:08 2015 -0700

----------------------------------------------------------------------
 log4j-liquibase/.gitignore                      |   3 +
 log4j-liquibase/pom.xml                         | 240 +++++++++++++++++++
 .../ext/logging/log4j2/Log4j2Logger.java        |  93 +++++++
 log4j-liquibase/src/site/xdoc/index.xml         |  48 ++++
 .../ext/logging/log4j2/LoggingTest.java         |  91 +++++++
 .../src/test/resources/log4j2-test.xml          |  14 ++
 pom.xml                                         |   6 +
 src/changes/changes.xml                         |   3 +
 8 files changed, 498 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4df0d394/log4j-liquibase/.gitignore
----------------------------------------------------------------------
diff --git a/log4j-liquibase/.gitignore b/log4j-liquibase/.gitignore
new file mode 100644
index 0000000..fbdf7eb
--- /dev/null
+++ b/log4j-liquibase/.gitignore
@@ -0,0 +1,3 @@
+/.classpath
+/.project
+/.settings/

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4df0d394/log4j-liquibase/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-liquibase/pom.xml b/log4j-liquibase/pom.xml
new file mode 100644
index 0000000..1fa4ac3
--- /dev/null
+++ b/log4j-liquibase/pom.xml
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.logging.log4j</groupId>
+    <artifactId>log4j</artifactId>
+    <version>2.4-SNAPSHOT</version>
+    <relativePath>../</relativePath>
+  </parent>
+  <artifactId>log4j-liquibase</artifactId>
+  <packaging>jar</packaging>
+  <name>Apache Log4j Liquibase Binding</name>
+  <description>The Apache Log4j Liquibase binding to Log4j 2 Core</description>
+  <properties>
+    <log4jParentDir>${basedir}/..</log4jParentDir>
+    <docLabel>Liquibase Documentation</docLabel>
+    <projectDir>/liquibase</projectDir>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.liquibase</groupId>
+      <artifactId>liquibase-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>**/*Test.java</exclude>
+          </excludes>
+        </configuration>
+        <executions>
+          <execution>
+            <id>default-tests</id>
+            <phase>test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <includes>
+                <include>**/*Test.java</include>
+              </includes>
+              <excludes>
+                <exclude>**/OptionalTest.java</exclude>
+              </excludes>
+            </configuration>
+          </execution>
+          <execution>
+            <id>test-optional</id>
+            <phase>test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <excludes>
+                <exclude>**/LoggerTest.java</exclude>
+                <exclude>**/MarkerTest.java</exclude>
+                <exclude>**/SerializeTest.java</exclude>
+              </excludes>
+              <includes>
+                <include>**/OptionalTest.java</include>
+              </includes>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- Include the standard NOTICE and LICENSE -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-remote-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>process</goal>
+            </goals>
+            <configuration>
+              <skip>false</skip>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            <Export-Package>
+              liquibase.ext.logging.log4j2
+            </Export-Package>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-changes-plugin</artifactId>
+        <version>${changes.plugin.version}</version>
+        <reportSets>
+          <reportSet>
+            <reports>
+              <report>changes-report</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+        <configuration>
+          <issueLinkTemplate>%URL%/show_bug.cgi?id=%ISSUE%</issueLinkTemplate>
+          <useJql>true</useJql>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <version>${checkstyle.plugin.version}</version>
+        <configuration>
+          <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->
+          <configLocation>${log4jParentDir}/checkstyle.xml</configLocation>
+          <suppressionsLocation>${log4jParentDir}/checkstyle-suppressions.xml</suppressionsLocation>
+          <enableRulesSummary>false</enableRulesSummary>
+          <propertyExpansion>basedir=${basedir}</propertyExpansion>
+          <propertyExpansion>licensedir=${log4jParentDir}/checkstyle-header.txt</propertyExpansion>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <version>${javadoc.plugin.version}</version>
+        <configuration>
+          <bottom><![CDATA[<p align="center">Copyright &#169; {inceptionYear}-{currentYear} {organizationName}. All Rights Reserved.<br />
+            Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, the Apache Logging project logo,
+            and the Apache Log4j logo are trademarks of The Apache Software Foundation.</p>]]></bottom>
+          <!-- module link generation is completely broken in the javadoc plugin for a multi-module non-aggregating
+               project -->
+          <detectOfflineLinks>false</detectOfflineLinks>
+          <linksource>true</linksource>
+        </configuration>
+        <reportSets>
+          <reportSet>
+            <id>non-aggregate</id>
+            <reports>
+              <report>javadoc</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>findbugs-maven-plugin</artifactId>
+        <version>${findbugs.plugin.version}</version>
+        <configuration>
+          <fork>true</fork>
+          <jvmArgs>-Duser.language=en</jvmArgs>
+          <threshold>Normal</threshold>
+          <effort>Default</effort>
+          <excludeFilterFile>${log4jParentDir}/findbugs-exclude-filter.xml</excludeFilterFile>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jxr-plugin</artifactId>
+        <version>${jxr.plugin.version}</version>
+        <reportSets>
+          <reportSet>
+            <id>non-aggregate</id>
+            <reports>
+              <report>jxr</report>
+            </reports>
+          </reportSet>
+          <reportSet>
+            <id>aggregate</id>
+            <reports>
+              <report>aggregate</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <version>${pmd.plugin.version}</version>
+        <configuration>
+          <targetJdk>${maven.compile.target}</targetJdk>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>
+

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4df0d394/log4j-liquibase/src/main/java/liquibase/ext/logging/log4j2/Log4j2Logger.java
----------------------------------------------------------------------
diff --git a/log4j-liquibase/src/main/java/liquibase/ext/logging/log4j2/Log4j2Logger.java b/log4j-liquibase/src/main/java/liquibase/ext/logging/log4j2/Log4j2Logger.java
new file mode 100644
index 0000000..96dd02c
--- /dev/null
+++ b/log4j-liquibase/src/main/java/liquibase/ext/logging/log4j2/Log4j2Logger.java
@@ -0,0 +1,93 @@
+/*
+ * 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 liquibase.ext.logging.log4j2;
+
+import liquibase.logging.core.AbstractLogger;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.spi.ExtendedLogger;
+
+/**
+ * Logs Liquidbase messages to Log4j 2.x.
+ * <p>
+ * This class must be in the {@code liquibase} package in order for the Liquibase plugin discovery mechanism to work.
+ * </p>
+ */
+public class Log4j2Logger extends AbstractLogger {
+
+    private static final String FQCN = Log4j2Logger.class.getName();
+
+    private ExtendedLogger logger;
+
+    @Override
+    public void debug(final String message) {
+        logger.logIfEnabled(FQCN, Level.DEBUG, null, buildMessage(message));
+    }
+
+    @Override
+    public void debug(final String message, final Throwable e) {
+        logger.logIfEnabled(FQCN, Level.DEBUG, null, buildMessage(message), e);
+    }
+
+    @Override
+    public int getPriority() {
+        return 5;
+    }
+
+    @Override
+    public void info(final String message) {
+        logger.logIfEnabled(FQCN, Level.INFO, null, buildMessage(message));
+    }
+
+    @Override
+    public void info(final String message, final Throwable e) {
+        logger.logIfEnabled(FQCN, Level.INFO, null, buildMessage(message), e);
+    }
+
+    @Override
+    public void setLogLevel(final String logLevel, final String logFile) {
+        setLogLevel(logLevel);
+        // ignore logFile
+    }
+
+    @Override
+    public void setName(final String name) {
+        logger = LogManager.getContext(false).getLogger(name);
+    }
+
+    @Override
+    public void severe(final String message) {
+        logger.logIfEnabled(FQCN, Level.ERROR, null, buildMessage(message));
+    }
+
+    @Override
+    public void severe(final String message, final Throwable e) {
+        logger.logIfEnabled(FQCN, Level.ERROR, null, buildMessage(message), e);
+    }
+
+    @Override
+    public void warning(final String message) {
+        logger.logIfEnabled(FQCN, Level.WARN, null, buildMessage(message));
+    }
+
+    @Override
+    public void warning(final String message, final Throwable e) {
+        logger.logIfEnabled(FQCN, Level.WARN, null, buildMessage(message), e);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4df0d394/log4j-liquibase/src/site/xdoc/index.xml
----------------------------------------------------------------------
diff --git a/log4j-liquibase/src/site/xdoc/index.xml b/log4j-liquibase/src/site/xdoc/index.xml
new file mode 100644
index 0000000..f054f46
--- /dev/null
+++ b/log4j-liquibase/src/site/xdoc/index.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<document>
+    <properties>
+        <title>Log4j 2 Liquibase Binding</title>
+        <author email="mikael@staldal.nu">Mikael St�ldal</author>
+    </properties>
+
+    <body>
+        <section name="Log4j 2 Liquibase Binding">
+
+            <p>
+                The Log4j 2 Liquibase Binding enables <a href="http://www.liquibase.org/">Liquibase</a> to log via Log4j 2.
+            </p>
+
+        </section>
+
+        <section name="Requirements">
+           <p>
+             The Log4j 2 Liquibase Binding requires at least Java 6 and has a dependency
+             on the Log4j 2 API as well as the Liquibase core.
+          </p>
+        </section>
+
+      <section name="Usage">
+        <p>
+            Including this module will automatically make Liquibase log via Log4j 2, due the the plugin auto discovery mechanism of Liquibase.
+        </p>
+      </section>
+
+    </body>
+</document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4df0d394/log4j-liquibase/src/test/java/liquibase/ext/logging/log4j2/LoggingTest.java
----------------------------------------------------------------------
diff --git a/log4j-liquibase/src/test/java/liquibase/ext/logging/log4j2/LoggingTest.java b/log4j-liquibase/src/test/java/liquibase/ext/logging/log4j2/LoggingTest.java
new file mode 100644
index 0000000..b2917ed
--- /dev/null
+++ b/log4j-liquibase/src/test/java/liquibase/ext/logging/log4j2/LoggingTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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 liquibase.ext.logging.log4j2;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import liquibase.logging.Logger;
+
+import org.apache.logging.log4j.core.util.Constants;
+import org.apache.logging.log4j.test.appender.ListAppender;
+import org.junit.After;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class LoggingTest {
+
+    private static final String NAME = "LoggerName";
+
+    static Logger logger;
+
+    @BeforeClass
+    public static void setupClass() {
+        logger = new Log4j2Logger();
+        logger.setName(NAME);
+        logger.setLogLevel("debug", null);
+    }
+
+    @Test
+    public void debug() {
+        logger.debug("Debug message");
+        verify(NAME + " " + getClass().getName() + " DEBUG Debug message" + Constants.LINE_SEPARATOR);
+    }
+
+    @Test
+    public void info() {
+        logger.info("Info message");
+        verify(NAME + " " + getClass().getName() + " INFO Info message" + Constants.LINE_SEPARATOR);
+    }
+
+    @Test
+    public void warning() {
+        logger.warning("Warning message");
+        verify(NAME + " " + getClass().getName() + " WARN Warning message" + Constants.LINE_SEPARATOR);
+    }
+
+    @Test
+    public void severe() {
+        logger.severe("Severe message");
+        verify(NAME + " " + getClass().getName() + " ERROR Severe message" + Constants.LINE_SEPARATOR);
+    }
+
+    @Test
+    public void severeStacktrace() {
+        logger.severe("Severe message with stacktrace", new RuntimeException("thrown error"));
+        verify(NAME + " " + getClass().getName() + " ERROR Severe message with stacktrace" + Constants.LINE_SEPARATOR
+                + "java.lang.RuntimeException: thrown error");
+    }
+
+    private void verify(final String expected) {
+        final ListAppender listApp = ListAppender.getListAppender("List");
+        assertNotNull("Missing Appender", listApp);
+        final List<String> events = listApp.getMessages();
+        assertTrue("Incorrect number of messages. Expected 1 Actual " + events.size(), events.size() == 1);
+        final String actual = events.get(0);
+        assertEquals("Incorrect message. Expected " + expected + ". Actual " + actual, expected, actual);
+        listApp.clear();
+    }
+
+    @After
+    public void cleanup() {
+        ListAppender.getListAppender("List").clear();
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4df0d394/log4j-liquibase/src/test/resources/log4j2-test.xml
----------------------------------------------------------------------
diff --git a/log4j-liquibase/src/test/resources/log4j2-test.xml b/log4j-liquibase/src/test/resources/log4j2-test.xml
new file mode 100644
index 0000000..bc8adf1
--- /dev/null
+++ b/log4j-liquibase/src/test/resources/log4j2-test.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration status="error">
+  <Appenders>
+    <List name="List">
+      <PatternLayout pattern="%c %C %p %m%n%ex{1}"/>
+    </List>
+  </Appenders>
+
+  <Loggers>
+    <Root level="DEBUG">
+      <AppenderRef ref="List"/>
+    </Root>
+  </Loggers>
+</configuration>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4df0d394/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5216d6a..598e480 100644
--- a/pom.xml
+++ b/pom.xml
@@ -665,6 +665,11 @@
         <version>0.0.6</version>
       </dependency>
       <dependency>
+        <groupId>org.liquibase</groupId>
+        <artifactId>liquibase-core</artifactId>
+        <version>3.3.5</version>
+      </dependency>
+      <dependency>
         <groupId>net.javacrumbs.json-unit</groupId>
         <artifactId>json-unit</artifactId>
         <version>1.1.6</version>
@@ -1128,6 +1133,7 @@
     <module>log4j-perf</module>
     <module>log4j-iostreams</module>
     <module>log4j-jul</module>
+    <module>log4j-liquibase</module>
   </modules>
   <profiles>
     <profile>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4df0d394/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 012b55a..4ab4ecf 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
   </properties>
   <body>
     <release version="2.4" date="2015-MM-DD" description="GA Release 2.4">
+      <action issue="LOG4J2-767" dev="ggregory" type="add" due-to="Mikael Ståldal">
+        New module for Liquibase integration.
+      </action>
       <action issue="LOG4J2-1023" dev="ggregory" type="add" due-to="Mikael Ståldal">
         New RewritePolicy for changing level of a log event.
       </action>