You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by st...@apache.org on 2012/12/21 12:52:12 UTC
svn commit: r1424883 - in /commons/sandbox/privilizer/trunk:
maven-plugin/src/main/java/org/apache/commons/weaver/maven/
modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/
processor/src/main/java/org/apache/commons/weaver/spi...
Author: struberg
Date: Fri Dec 21 11:52:12 2012
New Revision: 1424883
URL: http://svn.apache.org/viewvc?rev=1424883&view=rev
Log:
add a simple java.util.logging to Mojo logging redirector
this allows the weavers to use standard logging and we still
pick the output out in maven
Added:
commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java (with props)
Modified:
commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java
commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java
commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java
commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java
Modified: commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java?rev=1424883&r1=1424882&r2=1424883&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java (original)
+++ commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java Fri Dec 21 11:52:12 2012
@@ -22,6 +22,7 @@ import java.util.Properties;
import org.apache.commons.weaver.WeaveProcessor;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Parameter;
@@ -84,13 +85,21 @@ public abstract class AbstractWeaveMojo
@Override
public void execute() throws MojoExecutionException
{
+ Log mojoLog = getLog();
+ JavaLoggingToMojoLoggingRedirector logRedirector = new JavaLoggingToMojoLoggingRedirector(mojoLog);
+ logRedirector.activate();
+
try {
+
WeaveProcessor wp = WeaveProcessor.getInstance();
configure(wp);
wp.weave();
} catch (Exception e) {
throw new MojoExecutionException("weaving failed", e);
}
+ finally {
+ logRedirector.deactivate();
+ }
}
protected void configure(WeaveProcessor wp) {
Added: commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java?rev=1424883&view=auto
==============================================================================
--- commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java (added)
+++ commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java Fri Dec 21 11:52:12 2012
@@ -0,0 +1,151 @@
+/*
+ * 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.commons.weaver.maven;
+
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ResourceBundle;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
+
+
+/**
+ * This class redirects calls to java.util.Logging to Mojo logging.
+ */
+public class JavaLoggingToMojoLoggingRedirector
+{
+ private JDKLogHandler activeHandler;
+ private List<Handler> removedHandlers = new ArrayList<Handler>();
+
+ /**
+ * The Maven mojo logger to delegate messages to.
+ */
+ private Log mojoLogger;
+
+ /**
+ * @param mojoLogger the Maven mojo logger to delegate messages to.
+ */
+ public JavaLoggingToMojoLoggingRedirector(Log mojoLogger)
+ {
+ this.mojoLogger = mojoLogger;
+ }
+
+ /**
+ * Activates this feature.
+ */
+ public void activate() throws MojoExecutionException {
+ try {
+ Logger rootLogger = LogManager.getLogManager().getLogger("");
+ // remove old handlers
+ for (Handler handler : rootLogger.getHandlers()) {
+ rootLogger.removeHandler(handler);
+ removedHandlers.add(handler);
+ }
+ if (removedHandlers.size() == 0) {
+ throw new MojoExecutionException("could not remove any handler. aborting.");
+ }
+
+ // add our own
+ activeHandler = new JDKLogHandler();
+ activeHandler.setLevel(Level.ALL);
+ rootLogger.setLevel(Level.ALL);
+
+ rootLogger.addHandler(activeHandler);
+ } catch (Exception exc) {
+ throw new MojoExecutionException("failed to activate the jul logging redirector", exc);
+ }
+ }
+
+ /**
+ * deactivate the redirection and put the original Handlers back in place again.
+ */
+ public void deactivate() {
+ Logger rootLogger = LogManager.getLogManager().getLogger("");
+ // remove old handlers
+ for (Handler handler : rootLogger.getHandlers()) {
+ if (handler == activeHandler) {
+ rootLogger.removeHandler(handler);
+ }
+ }
+
+ for (Handler oldHandler : removedHandlers) {
+ rootLogger.addHandler(oldHandler);
+ }
+ }
+
+
+ private class JDKLogHandler extends Handler {
+
+ @Override
+ public void publish(LogRecord record) {
+ Throwable exception = record.getThrown();
+ Level level = record.getLevel();
+ if (level == Level.SEVERE && mojoLogger.isErrorEnabled()) {
+ mojoLogger.error(getMessage(record), exception);
+ }
+ else if (level == Level.WARNING && mojoLogger.isWarnEnabled()) {
+ mojoLogger.warn(getMessage(record), exception);
+ }
+ else if (level == Level.INFO && mojoLogger.isInfoEnabled()) {
+ mojoLogger.info(getMessage(record), exception);
+ }
+ else if (level == Level.CONFIG && mojoLogger.isDebugEnabled()) {
+ mojoLogger.debug(getMessage(record), exception);
+ }
+ else if (mojoLogger.isDebugEnabled()) {
+ mojoLogger.debug(getMessage(record), exception);
+ }
+ }
+
+ private String getMessage(LogRecord record) {
+ String message = record.getMessage();
+ ResourceBundle bundle = record.getResourceBundle();
+ Object params[] = record.getParameters();
+ if (bundle != null && bundle.containsKey(message)) {
+ // todo: cannot enforce Locale.ENGLISH here
+ message = bundle.getString(message);
+ }
+ if (params != null && params.length > 0) {
+ MessageFormat format = new MessageFormat(message);
+ message = format.format(params);
+ }
+ return message;
+ }
+
+ @Override
+ public void flush() {
+ // nothing to do
+ }
+
+ @Override
+ public void close() {
+ // nothing to do
+ }
+
+ }
+
+}
Propchange: commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java?rev=1424883&r1=1424882&r2=1424883&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java (original)
+++ commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java Fri Dec 21 11:52:12 2012
@@ -24,7 +24,7 @@ import org.apache.commons.weaver.utils.U
*/
public class PrivilizerWeaver implements Weaver
{
- private Logger logger = Logger.getLogger(PrivilizerWeaver.class.getName());
+ private static final Logger LOG = Logger.getLogger(PrivilizerWeaver.class.getName());
private FilesystemPrivilizer privilizer;
@@ -33,14 +33,9 @@ public class PrivilizerWeaver implements
private AccessLevel targetAccessLevel;
@Override
- public void setLogger(Logger customLogger)
- {
- this.logger = customLogger;
- }
-
- @Override
public void configure(List<String> classPath, File target, Map<String, Object> config)
{
+ LOG.info("");
privilizer = new FilesystemPrivilizer(policy, new URLClassLoader(URLArray.fromPaths(classPath)), target) {
@Override
protected boolean permitMethodWeaving(final AccessLevel accessLevel) {
Modified: commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java?rev=1424883&r1=1424882&r2=1424883&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java (original)
+++ commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java Fri Dec 21 11:52:12 2012
@@ -23,7 +23,6 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
-import java.util.logging.Logger;
/**
* An implementation of a 'Weaver' takes care about
@@ -45,12 +44,6 @@ public interface Weaver
void configure(List<String> classPath, File target, Map<String, Object> config);
/**
- * This method can be used to set a custom logger
- * @param customLogger
- */
- void setLogger(Logger customLogger);
-
- /**
* A Weaver must return a List of Annotations he is interested in.
*/
List<Class<? extends Annotation>> getInterest();
Modified: commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java?rev=1424883&r1=1424882&r2=1424883&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java (original)
+++ commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java Fri Dec 21 11:52:12 2012
@@ -41,11 +41,6 @@ public class TestWeaver implements Weave
public static List<Class> wovenClasses = new ArrayList<Class>();
@Override
- public void setLogger(Logger customLogger) {
- // do nothing
- }
-
- @Override
public void configure(List<String> classPath, File target, Map<String, Object> config)
{
Assert.assertNotNull(config);