Repository: tomee Updated Branches: refs/heads/master 6014cf207 -> 549d7334e
TOMEE-1629 log4j2 shutdown registry integration Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/549d7334 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/549d7334 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/549d7334 Branch: refs/heads/master Commit: 549d7334e14f885cd83834d78c3750d74bfcddbd Parents: 6014cf2 Author: Romain Manni-Bucau <[email protected]> Authored: Tue Sep 8 21:11:33 2015 -0700 Committer: Romain Manni-Bucau <[email protected]> Committed: Tue Sep 8 21:11:33 2015 -0700 ---------------------------------------------------------------------- utils/log4j2-tomee/pom.xml | 67 ++++++++++++++++++++ .../log4j2/CaptureLog4j2ShutdownHooks.java | 43 +++++++++++++ .../log4j2/Log4j2ShutdownHooksExecutor.java | 38 +++++++++++ .../org/apache/tomee/log4j2/SetupLog4j2.java | 45 +++++++++++++ .../META-INF/org.apache.openejb.extension | 2 + .../main/resources/log4j2.component.properties | 17 +++++ utils/pom.xml | 1 + 7 files changed, 213 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/549d7334/utils/log4j2-tomee/pom.xml ---------------------------------------------------------------------- diff --git a/utils/log4j2-tomee/pom.xml b/utils/log4j2-tomee/pom.xml new file mode 100644 index 0000000..c64be7a --- /dev/null +++ b/utils/log4j2-tomee/pom.xml @@ -0,0 +1,67 @@ +<?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"> + <parent> + <artifactId>utils</artifactId> + <groupId>org.apache.tomee</groupId> + <version>7.0.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>log4j2-tomee</artifactId> + <name>OpenEJB :: Utils :: Log4j2</name> + <description>Add this module if you use log4j2 in TomEE/lib and rely on shutdown hook and don't want to loose logs.</description> + + <properties> + <log4j2.version>2.3</log4j2.version> + <log4j.groupId>org.apache.logging.log4j</log4j.groupId> + </properties> + + <dependencies> + <dependency> + <groupId>${log4j.groupId}</groupId> + <artifactId>log4j-api</artifactId> + <version>${log4j2.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>${log4j.groupId}</groupId> + <artifactId>log4j-core</artifactId> + <version>${log4j2.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-catalina</artifactId> + <version>${tomcat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.tomee</groupId> + <artifactId>tomee-catalina</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> + </dependencies> + +</project> http://git-wip-us.apache.org/repos/asf/tomee/blob/549d7334/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/CaptureLog4j2ShutdownHooks.java ---------------------------------------------------------------------- diff --git a/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/CaptureLog4j2ShutdownHooks.java b/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/CaptureLog4j2ShutdownHooks.java new file mode 100644 index 0000000..15681ce --- /dev/null +++ b/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/CaptureLog4j2ShutdownHooks.java @@ -0,0 +1,43 @@ +/** + * 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.tomee.log4j2; + +import org.apache.logging.log4j.core.util.Cancellable; +import org.apache.logging.log4j.core.util.ShutdownCallbackRegistry; + +import java.util.Collection; +import java.util.concurrent.CopyOnWriteArraySet; + +public class CaptureLog4j2ShutdownHooks implements ShutdownCallbackRegistry { + static final Collection<Runnable> HOOKS = new CopyOnWriteArraySet<Runnable>(); + + public Cancellable addShutdownCallback(final Runnable callback) { + HOOKS.add(callback); + return new Cancellable() { + @Override + public void cancel() { + HOOKS.remove(callback); + } + + @Override + public void run() { + cancel(); + callback.run(); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/549d7334/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/Log4j2ShutdownHooksExecutor.java ---------------------------------------------------------------------- diff --git a/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/Log4j2ShutdownHooksExecutor.java b/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/Log4j2ShutdownHooksExecutor.java new file mode 100644 index 0000000..b43c487 --- /dev/null +++ b/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/Log4j2ShutdownHooksExecutor.java @@ -0,0 +1,38 @@ +/** + * 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.tomee.log4j2; + +import org.apache.catalina.Lifecycle; +import org.apache.catalina.LifecycleEvent; +import org.apache.catalina.LifecycleListener; +import org.apache.catalina.Server; + +import java.util.ArrayList; +import java.util.Collection; + +public class Log4j2ShutdownHooksExecutor implements LifecycleListener { + @Override + public void lifecycleEvent(final LifecycleEvent event) { + if (Server.class.isInstance(event.getSource()) && Lifecycle.AFTER_DESTROY_EVENT.equals(event.getType())) { + final Collection<Runnable> copy = new ArrayList<>(CaptureLog4j2ShutdownHooks.HOOKS); + CaptureLog4j2ShutdownHooks.HOOKS.removeAll(copy); + for (final Runnable runnable : copy) { + runnable.run(); + } + } + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/549d7334/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/SetupLog4j2.java ---------------------------------------------------------------------- diff --git a/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/SetupLog4j2.java b/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/SetupLog4j2.java new file mode 100644 index 0000000..c58e172 --- /dev/null +++ b/utils/log4j2-tomee/src/main/java/org/apache/tomee/log4j2/SetupLog4j2.java @@ -0,0 +1,45 @@ +/** + * 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.tomee.log4j2; + +import org.apache.openejb.assembler.classic.event.AssemblerCreated; +import org.apache.openejb.core.ParentClassLoaderFinder; +import org.apache.openejb.observer.Observes; +import org.apache.openejb.util.classloader.URLClassLoaderFirst; +import org.apache.tomee.loader.TomcatHelper; + +import java.util.Collection; + +public class SetupLog4j2 { + public void setup(@Observes final AssemblerCreated initEvent) { + try { + ParentClassLoaderFinder.Helper.get().loadClass("org.apache.logging.log4j.core.util.ShutdownCallbackRegistry"); + doSetup(); + } catch (final ClassNotFoundException e) { + // no-op + } + } + + private void doSetup() { + // org.apache.openejb.log4j2.CaptureLog4j2ShutdownHooks is likely int the container so just skip the API, luckily it has no dep :) + final Collection<String> forcedSkip = URLClassLoaderFirst.FORCED_SKIP; + forcedSkip.add("org.apache.logging.log4j.api."); + forcedSkip.add("org.apache.logging.log4j.core."); + + TomcatHelper.getServer().addLifecycleListener(new Log4j2ShutdownHooksExecutor()); + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/549d7334/utils/log4j2-tomee/src/main/resources/META-INF/org.apache.openejb.extension ---------------------------------------------------------------------- diff --git a/utils/log4j2-tomee/src/main/resources/META-INF/org.apache.openejb.extension b/utils/log4j2-tomee/src/main/resources/META-INF/org.apache.openejb.extension new file mode 100644 index 0000000..c7d5f67 --- /dev/null +++ b/utils/log4j2-tomee/src/main/resources/META-INF/org.apache.openejb.extension @@ -0,0 +1,2 @@ +org.apache.tomee.log4j2.SetupLog4j2 + http://git-wip-us.apache.org/repos/asf/tomee/blob/549d7334/utils/log4j2-tomee/src/main/resources/log4j2.component.properties ---------------------------------------------------------------------- diff --git a/utils/log4j2-tomee/src/main/resources/log4j2.component.properties b/utils/log4j2-tomee/src/main/resources/log4j2.component.properties new file mode 100644 index 0000000..e4e8347 --- /dev/null +++ b/utils/log4j2-tomee/src/main/resources/log4j2.component.properties @@ -0,0 +1,17 @@ +# +# 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.shutdownCallbackRegistry = org.apache.tomee.log4j2.CaptureLog4j2ShutdownHooks http://git-wip-us.apache.org/repos/asf/tomee/blob/549d7334/utils/pom.xml ---------------------------------------------------------------------- diff --git a/utils/pom.xml b/utils/pom.xml index 987f67b..5effe85 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -33,5 +33,6 @@ <module>openejb-core-eclipselink</module> <module>openejb-provisionning</module> <module>openejb-mockito</module> + <module>log4j2-tomee</module> </modules> </project>
