TOMEE-724 simpleLog for tomee + internal agnotisc log when init phase of a webapp is hitten

git-svn-id: https://svn.apache.org/repos/asf/openejb/trunk@1431964 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java b/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
index ce5164d..a2c838a 100644
--- a/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
+++ b/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
@@ -23,14 +23,13 @@
 import org.apache.openejb.arquillian.common.TomEEContainer;
 import org.apache.openejb.assembler.Deployer;
 import org.apache.openejb.config.RemoteServer;
-import org.jboss.arquillian.container.spi.client.container.DeploymentException;
+import org.apache.tomee.util.InstallationEnrichers;
 import org.jboss.arquillian.container.spi.client.container.LifecycleException;
 import org.jboss.shrinkwrap.api.Archive;
 
 import javax.naming.NamingException;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -85,7 +84,7 @@
             }
             container = new RemoteServer();
 
-            container.setAdditionalClasspath(addOneLineFormatter(tomeeHome));
+            container.setAdditionalClasspath(InstallationEnrichers.addOneLineFormatter(tomeeHome));
             container.start(args(), "start", true);
             container.killOnExit();
 
@@ -110,28 +109,6 @@
         }
     }
 
-    private String addOneLineFormatter(final File home) {
-        final String name = SimpleTomEEFormatter.class.getPackage().getName().replace('.', '/') + "/" + SimpleTomEEFormatter.class.getSimpleName() + ".class";
-        final InputStream is = getClass().getResourceAsStream("/" + name);
-        if (is != null) {
-            final File parent = Files.path(home, "bin", "classes");
-            final File destination = new File(parent, name);
-            if (!destination.getParentFile().mkdirs()) {
-                LOGGER.warning("Can't create " + destination.getPath());
-            } else {
-                try {
-                    IO.copy(is, destination);
-                    return parent.getAbsolutePath(); // to add to the classpath, don't return destination
-                } catch (IOException e) {
-                    LOGGER.log(Level.WARNING, "Can't add SingleLineFormatter", e);
-                } finally {
-                    IO.closeSilently(is);
-                }
-            }
-        }
-        return null;
-    }
-
     private List<String> args() {
         String opts = configuration.getCatalina_opts();
         if (opts == null || (opts = opts.trim()).isEmpty()) {
diff --git a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
index edcef19..343629d 100644
--- a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
+++ b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
@@ -33,7 +33,9 @@
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.Zips;
 import org.apache.openejb.util.OpenEjbVersion;
+import org.apache.tomee.util.InstallationEnrichers;
 import org.apache.tomee.util.QuickServerXmlParser;
+import org.apache.tomee.util.SimpleTomEEFormatter;
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
@@ -56,6 +58,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
+import java.util.logging.SimpleFormatter;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
@@ -127,6 +130,9 @@
     @Parameter(property = "tomee-plugin.debug", defaultValue = "false")
     protected boolean debug;
 
+    @Parameter(property = "tomee-plugin.simple-log", defaultValue = "false")
+    protected boolean simpleLog;
+
     @Parameter(property = "tomee-plugin.debugPort", defaultValue = "5005")
     protected int debugPort;
 
@@ -209,6 +215,7 @@
     protected Settings settings;
 
     protected File deployedFile = null;
+    private String additionalCp = null;
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
@@ -236,6 +243,10 @@
             }
         }
 
+        if (simpleLog) {
+            additionalCp = activateSimpleLog();
+        }
+
         if (!keepServerXmlAsthis) {
             overrideAddresses();
         }
@@ -245,6 +256,31 @@
         run();
     }
 
+    private String activateSimpleLog() {
+        // adding SimpleTomEEFormatter to the classpath
+        final String cp = InstallationEnrichers.addOneLineFormatter(catalinaBase);
+
+        // replacing java.util.logging.SimpleFormatter by SimpleTomEEFormatter
+        final File loggingProperties = new File(catalinaBase, "conf/logging.properties");
+        if (loggingProperties.exists() && !new File(config, "conf/logging.properties").exists()) {
+            try {
+                final String content = IO.slurp(loggingProperties)
+                        .replace(SimpleFormatter.class.getName(), SimpleTomEEFormatter.class.getName());
+                final FileWriter writer = new FileWriter(loggingProperties);
+                try {
+                    writer.write(content);
+                } finally {
+                    IO.close(writer);
+                }
+            } catch (Exception e) {
+                getLog().error("Can't set SimpleTomEEFormatter", e);
+                return null;
+            }
+            return cp;
+        }
+        return null;
+    }
+
     private void removeDefaultWebapps(final boolean removeTomee) {
         final File webapps = new File(catalinaBase, webappDir);
         if (webapps.isDirectory()) {
@@ -570,6 +606,9 @@
         System.setProperty("server.shutdown.port", Integer.toString(tomeeShutdownPort));
 
         final RemoteServer server = new RemoteServer(getConnectAttempts(), false);
+        if (additionalCp != null) {
+            server.setAdditionalClasspath(additionalCp);
+        }
         addShutdownHooks(server); // some shutdown hooks are always added (see UpdatableTomEEMojo)
 
         final CountDownLatch stopCondition;
diff --git a/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java b/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index 08e50fb..a9f942f 100644
--- a/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ b/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -698,7 +698,7 @@
         if (isIgnored(standardContext)) return;
 
         // just adding a carriage return to get logs more readable
-        logger.info("-------------------------\nTomcatWebAppBuilder.init " + finalName(standardContext.getPath()));
+        logger.info("------------------------- " + finalName(standardContext.getPath()));
 
         if (FORCE_RELOADABLE) {
             standardContext.setReloadable(true);
diff --git a/openejb/tomee/tomee-util/pom.xml b/openejb/tomee/tomee-util/pom.xml
index 27465f9..713b2a0 100644
--- a/openejb/tomee/tomee-util/pom.xml
+++ b/openejb/tomee/tomee-util/pom.xml
@@ -28,4 +28,13 @@
 
   <artifactId>tomee-util</artifactId>
   <name>OpenEJB :: TomEE :: Util</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-loader</artifactId>
+      <version>4.5.2-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
 </project>
diff --git a/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/InstallationEnrichers.java b/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/InstallationEnrichers.java
new file mode 100644
index 0000000..c802060
--- /dev/null
+++ b/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/InstallationEnrichers.java
@@ -0,0 +1,42 @@
+package org.apache.tomee.util;
+
+import org.apache.openejb.loader.Files;
+import org.apache.openejb.loader.IO;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class InstallationEnrichers {
+    private InstallationEnrichers() {
+        // no-op
+    }
+
+    public static String addOneLineFormatter(final File home) {
+        final String name = SimpleTomEEFormatter.class.getPackage().getName().replace('.', '/') + "/" + SimpleTomEEFormatter.class.getSimpleName() + ".class";
+        final InputStream is = InstallationEnrichers.class.getResourceAsStream("/" + name);
+        if (is != null) {
+            final File parent = Files.path(home, "bin", "classes");
+            final File destination = new File(parent, name);
+            if (destination.exists()) {
+                return parent.getAbsolutePath();
+            }
+
+            if (!destination.getParentFile().mkdirs()) {
+                Logger.getLogger(InstallationEnrichers.class.getName()).warning("Can't create " + destination.getPath());
+            } else {
+                try {
+                    IO.copy(is, destination);
+                    return parent.getAbsolutePath(); // to add to the classpath, don't return destination
+                } catch (IOException e) {
+                    Logger.getLogger(InstallationEnrichers.class.getName()).log(Level.WARNING, "Can't add SingleLineFormatter", e);
+                } finally {
+                    IO.close(is);
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/SimpleTomEEFormatter.java b/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/SimpleTomEEFormatter.java
new file mode 100644
index 0000000..29985a5
--- /dev/null
+++ b/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/SimpleTomEEFormatter.java
@@ -0,0 +1,31 @@
+package org.apache.tomee.util;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.logging.LogRecord;
+
+public class SimpleTomEEFormatter extends java.util.logging.Formatter {
+    private static final String LN = System.getProperty("line.separator");
+
+    @Override
+    public synchronized String format(LogRecord record) {
+        final Throwable thrown = record.getThrown();
+        final StringBuilder sbuf = new StringBuilder();
+        sbuf.append(record.getLevel().getLocalizedName());
+        sbuf.append(" - ");
+        sbuf.append(formatMessage(record));
+        sbuf.append(LN);
+        if (thrown != null) {
+            try {
+                final StringWriter sw = new StringWriter();
+                final PrintWriter pw = new PrintWriter(sw);
+                thrown.printStackTrace(pw);
+                pw.close();
+                sbuf.append(sw.toString());
+            } catch (Exception ex) {
+                // no-op
+            }
+        }
+        return sbuf.toString();
+    }
+}