You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by rg...@apache.org on 2011/03/22 00:47:08 UTC

svn commit: r1084027 [2/2] - in /logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers: ./ log4j2-core/ log4j2-core/output/ log4j2-core/src/main/java/org/apache/logging/log4j/core/ log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/ log4j...

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LineSeparatorPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LineSeparatorPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LineSeparatorPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LineSeparatorPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LogEventPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LogEventPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LogEventPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LogEventPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LoggerPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LoggerPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LoggerPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/LoggerPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
@@ -61,8 +61,6 @@ public final class LoggerPatternConverte
      * {@inheritDoc}
      */
     public void format(final LogEvent event, final StringBuilder toAppendTo) {
-        final int initialLength = toAppendTo.length();
-        toAppendTo.append(event.getLoggerName());
-        abbreviate(initialLength, toAppendTo);
+        toAppendTo.append(abbreviate(event.getLoggerName()));
     }
 }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MDCPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MDCPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MDCPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MDCPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,15 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 
 import java.util.Map;
 import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeMap;
 import java.util.TreeSet;
 
 /**

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MethodLocationPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MethodLocationPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MethodLocationPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/MethodLocationPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NDCPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NDCPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NDCPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NDCPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -124,12 +124,12 @@ public abstract class NameAbbreviator {
     }
 
     /**
-     * Abbreviates a name in a StringBuffer.
+     * Abbreviates a name in a String.
      *
-     * @param nameStart starting position of name in buf.
      * @param buf       buffer, may not be null.
+     * @return The abbreviated String.
      */
-    public abstract void abbreviate(final int nameStart, final StringBuilder buf);
+    public abstract String abbreviate(final String buf);
 
     /**
      * Abbreviator that simply appends full name to buffer.
@@ -144,7 +144,8 @@ public abstract class NameAbbreviator {
         /**
          * {@inheritDoc}
          */
-        public void abbreviate(final int nameStart, final StringBuilder buf) {
+        public String abbreviate(final String buf) {
+            return buf;
         }
     }
 
@@ -169,27 +170,24 @@ public abstract class NameAbbreviator {
         /**
          * Abbreviate name.
          *
-         * @param buf       buffer to append abbreviation.
-         * @param nameStart start of name to abbreviate.
+         * @param buf The String to abbreviate.
+         * @return the abbreviated String.
          */
-        public void abbreviate(final int nameStart, final StringBuilder buf) {
-            int len = buf.length() - nameStart;
+        public String abbreviate(final String buf) {
 
             // We substract 1 from 'len' when assigning to 'end' to avoid out of
             // bounds exception in return r.substring(end+1, len). This can happen if
             // precision is 1 and the category name ends with a dot.
             int end = buf.length() - 1;
 
-            String bufString = buf.toString();
             for (int i = count; i > 0; i--) {
-                end = bufString.lastIndexOf(".", end - 1);
-
-                if ((end == -1) || (end < nameStart)) {
-                    return;
+                end = buf.lastIndexOf(".", end - 1);
+                if (end == -1) {
+                    return buf;
                 }
             }
 
-            buf.delete(nameStart, end + 1);
+            return buf.substring(end + 1);
         }
     }
 
@@ -279,15 +277,16 @@ public abstract class NameAbbreviator {
          * @param buf       buffer that abbreviated name is appended.
          * @param nameStart start of name.
          */
-        public void abbreviate(final int nameStart, final StringBuilder buf) {
+        public String abbreviate(final String buf) {
             //
             //  all non-terminal patterns are executed once
             //
-            int pos = nameStart;
+            int pos = 0;
+            StringBuilder sb = new StringBuilder(buf);
 
             for (int i = 0; (i < (fragments.length - 1)) && (pos < buf.length());
                  i++) {
-                pos = fragments[i].abbreviate(buf, pos);
+                pos = fragments[i].abbreviate(sb, pos);
             }
 
             //
@@ -296,8 +295,9 @@ public abstract class NameAbbreviator {
             PatternAbbreviatorFragment terminalFragment = fragments[fragments.length - 1];
 
             while ((pos < buf.length()) && (pos >= 0)) {
-                pos = terminalFragment.abbreviate(buf, pos);
+                pos = terminalFragment.abbreviate(sb, pos);
             }
+            return sb.toString();
         }
     }
 }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NamePatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NamePatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NamePatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/NamePatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 
 /**
@@ -47,10 +47,10 @@ public abstract class NamePatternConvert
     /**
      * Abbreviate name in string buffer.
      *
-     * @param nameStart starting position of name to abbreviate.
      * @param buf       string buffer containing name.
+     * @return The abbreviated name.
      */
-    protected final void abbreviate(final int nameStart, final StringBuilder buf) {
-        abbreviator.abbreviate(nameStart, buf);
+    protected final String abbreviate(final String buf) {
+        return abbreviator.abbreviate(buf);
     }
 }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 
 /**

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.config.plugins.PluginManager;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/RelativeTimePatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/RelativeTimePatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/RelativeTimePatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/RelativeTimePatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/ThreadPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/ThreadPatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/ThreadPatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/ThreadPatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java?rev=1084027&r1=1074871&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java Mon Mar 21 23:47:06 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/PerformanceComparison.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/PerformanceComparison.java?rev=1084027&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/PerformanceComparison.java (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/PerformanceComparison.java Mon Mar 21 23:47:06 2011
@@ -0,0 +1,192 @@
+/*
+ * 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;
+
+import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
+import org.apache.logging.log4j.core.util.Profiler;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+
+/**
+ *
+ */
+public class PerformanceComparison {
+
+    private Logger logger = LogManager.getLogger(PerformanceComparison.class.getName());
+    private org.slf4j.Logger logbacklogger = org.slf4j.LoggerFactory.getLogger(PerformanceComparison.class);
+    private org.apache.log4j.Logger log4jlogger = org.apache.log4j.Logger.getLogger(PerformanceComparison.class);
+
+
+    // How many times should we try to log:
+    private static final int COUNT = 1000000;
+    private static final int PROFILE_COUNT = 500000;
+    private static final int WARMUP = 1000;
+
+    private static final String CONFIG = "log4j2-perf.xml";
+    private static final String LOGBACK_CONFIG = "logback-perf.xml";
+    private static final String LOG4J_CONFIG = "log4j12-perf.xml";
+
+    private static final String LOGBACK_CONF = "logback.configurationFile";
+    private static final String LOG4J_CONF = "log4j.configuration";
+
+    @BeforeClass
+    public static void setupClass() {
+        System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, CONFIG);
+        System.setProperty(LOGBACK_CONF, LOGBACK_CONFIG);
+        System.setProperty(LOG4J_CONF, LOG4J_CONFIG);
+    }
+
+    @AfterClass
+    public static void cleanupClass() {
+        System.clearProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+        System.clearProperty(LOGBACK_CONF);
+        System.clearProperty(LOG4J_CONF);
+    }
+
+    @Test
+    public void testPerformance() throws Exception {
+
+        log4j(WARMUP);
+        logback(WARMUP);
+        log4j2(WARMUP);
+
+        if (Profiler.isActive()) {
+            System.out.println("Profiling Log4j 2.0");
+            Profiler.start();
+            long result = log4j2(PROFILE_COUNT);
+            Profiler.stop();
+            System.out.println("###############################################");
+            System.out.println("Log4j 2.0: " + result);
+            System.out.println("###############################################");
+        } else {
+            System.out.println("Starting Log4j 2.0");
+            long result3 = log4j2(COUNT);
+            System.out.println("Starting Log4j");
+            long result1 = log4j(COUNT);
+            System.out.println("Starting Logback");
+            long result2 = logback(COUNT);
+
+            System.out.println("###############################################");
+            System.out.println("Log4j: " + result1);
+            System.out.println("Logback: " + result2);
+            System.out.println("Log4j 2.0: " + result3);
+            System.out.println("###############################################");
+        }
+    }
+
+    //@Test
+    public void testRawPerformance() throws Exception {
+        OutputStream os = new FileOutputStream("target/testos.log", true);
+        long result1 = writeToStream(COUNT, os);
+        os.close();
+        OutputStream bos = new BufferedOutputStream(new FileOutputStream("target/testbuffer.log", true));
+        long result2 = writeToStream(COUNT, bos);
+        bos.close();
+        Writer w = new FileWriter("target/testwriter.log", true);
+        long result3 = writeToWriter(COUNT, w);
+        w.close();
+        FileOutputStream cos = new FileOutputStream("target/testchannel.log", true);
+        FileChannel channel = cos.getChannel();
+        long result4 = writeToChannel(COUNT, channel);
+        cos.close();
+        System.out.println("###############################################");
+        System.out.println("FileOutputStream: " + result1);
+        System.out.println("BufferedOutputStream: " + result2);
+        System.out.println("FileWriter: " + result3);
+        System.out.println("FileChannel: " + result4);
+        System.out.println("###############################################");
+    }
+
+    private long log4j(int loop) {
+        Integer j = new Integer(2);
+        long start = System.nanoTime();
+        for (int i = 0; i < loop; i++) {
+            log4jlogger.debug("SEE IF THIS IS LOGGED " + j + ".");
+        }
+        return (System.nanoTime() - start) / loop;
+    }
+
+    private long logback(int loop) {
+        Integer j = new Integer(2);
+        long start = System.nanoTime();
+        for (int i = 0; i < loop; i++) {
+            logbacklogger.debug("SEE IF THIS IS LOGGED " + j + ".");
+        }
+        return (System.nanoTime() - start) / loop;
+    }
+
+
+    private long log4j2(int loop) {
+        Integer j = new Integer(2);
+        long start = System.nanoTime();
+        for (int i = 0; i < loop; i++) {
+            logger.debug("SEE IF THIS IS LOGGED " + j + ".");
+        }
+        return (System.nanoTime() - start) / loop;
+    }
+
+
+    private long writeToWriter(int loop, Writer w) throws Exception {
+        Integer j = new Integer(2);
+        long start = System.nanoTime();
+        for (int i = 0; i < loop; i++) {
+            w.write("SEE IF THIS IS LOGGED " + j + ".");
+        }
+        return (System.nanoTime() - start) / loop;
+    }
+
+    private long writeToStream(int loop, OutputStream os) throws Exception {
+        Integer j = new Integer(2);
+        long start = System.nanoTime();
+        for (int i = 0; i < loop; i++) {
+            os.write(getBytes("SEE IF THIS IS LOGGED " + j + "."));
+        }
+        return (System.nanoTime() - start) / loop;
+    }
+
+    private long writeToChannel(int loop, FileChannel channel) throws Exception {
+        Integer j = new Integer(2);
+        ByteBuffer buf = ByteBuffer.allocateDirect(8*1024);
+        long start = System.nanoTime();
+        for (int i = 0; i < loop; i++) {
+            channel.write(getByteBuffer(buf, "SEE IF THIS IS LOGGED " + j + "."));
+        }
+        return (System.nanoTime() - start) / loop;
+    }
+
+    private ByteBuffer getByteBuffer(ByteBuffer buf, String s) {
+        buf.clear();
+        buf.put(s.getBytes());
+        buf.flip();
+        return buf;
+    }
+
+    private byte[] getBytes(String s) {
+        return s.getBytes();
+    }
+
+}
\ No newline at end of file

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/SimplePerfTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/SimplePerfTest.java?rev=1084027&r1=1084026&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/SimplePerfTest.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/SimplePerfTest.java Mon Mar 21 23:47:06 2011
@@ -18,13 +18,13 @@ package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.DefaultConfiguration;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.Assert;
 
 import java.util.Random;
-import java.util.UUID;
-import java.util.logging.LogRecord;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -49,6 +49,12 @@ public class SimplePerfTest {
     @BeforeClass
     public static void setupClass() {
 
+        Configuration config = ((LoggerContext)LogManager.getContext()).getConfiguration();
+        if (!DefaultConfiguration.DEFAULT_NAME.equals(config.getName())) {
+            System.out.println("Configuration was " + config.getName());
+            ((LoggerContext)LogManager.getContext()).setConfiguration(new DefaultConfiguration());
+        }
+
         Random r = new Random(WARMUP);
 
         for (int i=0; i < RAND_SIZE; ++i) {
@@ -87,10 +93,12 @@ public class SimplePerfTest {
 
     @Test
     public void debugLogger() {
+        System.gc();
         Timer timer = new Timer("DebugLogger", LOOP_CNT);
+        String msg = "This is a test";
         timer.start();
         for (int i=0; i < LOOP_CNT; ++i) {
-            logger.debug("This is a test");
+            logger.debug(msg);
         }
         timer.stop();
         System.out.println(timer.toString());

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java?rev=1084027&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java Mon Mar 21 23:47:06 2011
@@ -0,0 +1,241 @@
+/*
+ * 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.core.appender;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.Log4jLogEvent;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.junit.After;
+import org.junit.Test;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ *
+ */
+public class FileAppenderTest {
+
+    private static final String FILENAME = "target/fileAppenderTest.log";
+    private static final int THREADS = 2;
+
+    @BeforeClass
+    public static void setupClass() {
+        deleteFile();
+    }
+
+    @AfterClass
+    public static void cleanupClass() {
+        deleteFile();
+        assertTrue("Manager for " + FILENAME + " not removed", !OutputStreamManager.hasManager(FILENAME));
+    }
+
+    @After
+    public void teardown() {
+        deleteFile();
+    }
+
+    @Test
+    public void testAppender() throws Exception {
+        writer(false, 1, "test");
+        verifyFile(1);
+    }
+
+    @Test
+    public void testLockingAppender() throws Exception {
+        writer(true, 1, "test");
+        verifyFile(1);
+    }
+
+    @Test
+    public void testMultipleAppenders() throws Exception {
+        ExecutorService pool = Executors.newFixedThreadPool(THREADS);
+        int count = 10;
+        Runnable runnable = new FileWriterRunnable(false, count);
+        for (int i=0; i < THREADS; ++i) {
+            pool.execute(runnable);
+        }
+        pool.shutdown();
+        pool.awaitTermination(10, TimeUnit.SECONDS);
+        verifyFile(THREADS * count);
+    }
+
+
+    @Test
+    public void testMultipleLockedAppenders() throws Exception {
+        ExecutorService pool = Executors.newFixedThreadPool(THREADS);
+        int count = 10;
+        Runnable runnable = new FileWriterRunnable(true, count);
+        for (int i=0; i < THREADS; ++i) {
+            pool.execute(runnable);
+        }
+        pool.shutdown();
+        pool.awaitTermination(10, TimeUnit.SECONDS);
+        verifyFile(THREADS * count);
+    }
+
+
+    //@Test
+    public void testMultipleVMs() throws Exception {
+
+        String classPath = System.getProperty("java.class.path");
+        Integer count = 10;
+        int processes = 3;
+        Process[] process = new Process[processes];
+        ProcessBuilder[] builders = new ProcessBuilder[processes];
+        for (int index=0; index < processes; ++index) {
+            builders[index] = new ProcessBuilder("java","-cp", classPath, ProcessTest.class.getName(),
+                "Process " + index, count.toString(), "true");
+        }
+        for (int index=0; index < processes; ++index) {
+            process[index] = builders[index].start();
+        }
+        for (int index=0; index < processes; ++index) {
+            Process p = process[index];
+            //System.out.println("Process " + index + " exited with " + p.waitFor());
+            InputStream is = p.getInputStream();
+            InputStreamReader isr = new InputStreamReader(is);
+            BufferedReader br = new BufferedReader(isr);
+            String line;
+            while ((line = br.readLine()) != null) {
+                System.out.println(line);
+            }
+
+            p.destroy();
+        }
+        verifyFile(count * processes);
+    }
+
+    private static void writer(boolean lock, int count, String name) throws Exception {
+        Layout layout = new PatternLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN);
+        FileManager manager = FileManager.getFileManager(FILENAME, true, lock, false);
+        FileAppender app = new FileAppender("test", layout, null, manager, FILENAME, false, false);
+        Thread t = Thread.currentThread();
+        app.start();
+        assertTrue("Appender did not start", app.isStarted());
+        for (int i=0; i < count; ++i) {
+            LogEvent event = new Log4jLogEvent("TestLogger", null, FileAppenderTest.class.getName(), Level.INFO,
+                new SimpleMessage("Test"), null, null, null, name, null, System.currentTimeMillis());
+            try {
+                app.append(event);
+                t.sleep(25);  // Give up control long enough for another thread/process to occasionally do something.
+            } catch (Exception ex) {
+                throw ex;
+            }
+        }
+        app.stop();
+        assertFalse("Appender did not stop", app.isStarted());
+    }
+
+    private void verifyFile(int count) throws Exception {
+        //String expected = "[\\w]* \\[\\s*\\] INFO TestLogger - Test$";
+        String expected = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3} \\[[^\\]]*\\] INFO TestLogger - Test";
+        Pattern pattern = Pattern.compile(expected);
+        DataInputStream is = new DataInputStream(new BufferedInputStream(new FileInputStream(FILENAME)));
+        int counter = 0;
+        String str = "";
+        while (is.available() != 0) {
+            str = is.readLine();
+            //System.out.println(str);
+            ++counter;
+            Matcher matcher = pattern.matcher(str);
+            assertTrue("Bad data: " + str, matcher.matches());
+        }
+        assertTrue("Incorrect count: was " + counter + " should be " + counter, count == counter);
+
+    }
+
+
+    private static void deleteFile() {
+        File file = new File(FILENAME);
+        if (file.exists()) {
+            file.delete();
+        }
+    }
+
+    public class FileWriterRunnable implements Runnable {
+        private final boolean lock;
+        private final int count;
+
+        public FileWriterRunnable(boolean lock, int count)  {
+            this.lock = lock;
+            this.count = count;
+        }
+        public void run() {
+            Thread thread = Thread.currentThread();
+
+            try {
+                writer(lock, count, thread.getName());
+
+            } catch (Exception ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+    }
+
+    public static class ProcessTest {
+
+        public static void main(String[] args) {
+
+            if (args.length != 3) {
+                System.out.println("Required arguments 'id', 'count' and 'lock' not provided");
+                System.exit(-1);
+            }
+            String id = args[0];
+
+            int count = Integer.parseInt(args[1]);
+
+            if (count <= 0) {
+                System.out.println("Invalid count value: " + args[1]);
+                System.exit(-1);
+            }
+            boolean lock = Boolean.parseBoolean(args[2]);
+
+            //System.out.println("Got arguments " + id + ", " + count + ", " + lock);
+
+            try {
+                writer(lock, count, id);
+                //thread.sleep(50);
+
+            } catch (Exception ex) {
+                throw new RuntimeException(ex);
+            }
+
+
+        }
+    }
+}

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppender.java?rev=1084027&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppender.java (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppender.java Mon Mar 21 23:47:06 2011
@@ -0,0 +1,47 @@
+/*
+ * 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.core.appender;
+
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.filter.Filters;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ *
+ */
+public class InMemoryAppender extends OutputStreamAppender {
+
+    public InMemoryAppender(String name, Layout layout, Filters filters, boolean handleException) {
+        super(name, layout, filters, handleException, true, new InMemoryManager(name));
+    }
+
+    public String toString() {
+        return getManager().toString();
+    }
+
+    private static class InMemoryManager extends OutputStreamManager {
+
+        public InMemoryManager(String name) {
+            super(new ByteArrayOutputStream(), name);
+        }
+
+        public String toString() {
+            return getOutputStream().toString();
+        }
+    }
+}

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java?rev=1084027&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java Mon Mar 21 23:47:06 2011
@@ -0,0 +1,53 @@
+/*
+ * 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.core.appender;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.Log4jLogEvent;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.message.SimpleMessage;
+
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertEquals;
+
+/**
+ *
+ */
+public class OutputStreamAppenderTest {
+
+
+    @Test
+    public void testAppender() {
+        Layout layout = new PatternLayout();
+        InMemoryAppender app = new InMemoryAppender("test", layout, null, false);
+        LogEvent event = new Log4jLogEvent("TestLogger", null, OutputStreamAppenderTest.class.getName(), Level.INFO,
+            new SimpleMessage("Test"), null);
+        app.start();
+        assertTrue("Appender did not start", app.isStarted());
+        app.append(event);
+        String msg = app.toString();
+        assertNotNull("No message", msg);
+        assertTrue("Incorrect message: " + msg , msg.endsWith("Test\n"));
+        app.stop();
+        assertFalse("Appender did not stop", app.isStarted());
+    }
+}

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/config/XMLConfigurationTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/config/XMLConfigurationTest.java?rev=1084027&r1=1084026&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/config/XMLConfigurationTest.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/config/XMLConfigurationTest.java Mon Mar 21 23:47:06 2011
@@ -28,6 +28,10 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.util.Iterator;
 import java.util.Map;
 
@@ -41,6 +45,7 @@ import static org.junit.Assert.assertEqu
 public class XMLConfigurationTest {
 
     private static final String CONFIG = "log4j-test1.xml";
+    private static final String LOGFILE = "target/test.log";
 
     @BeforeClass
     public static void setupClass() {
@@ -93,9 +98,21 @@ public class XMLConfigurationTest {
     }
 
     @Test
-    public void logToFile() {
+    public void logToFile() throws Exception {
+        FileOutputStream fos = new FileOutputStream(LOGFILE, false);
+        fos.flush();
+        fos.close();
         Logger logger = LogManager.getLogger("org.apache.logging.log4j.test2.Test");
         logger.debug("This is a test");
+        DataInputStream is = new DataInputStream(new BufferedInputStream(new FileInputStream(LOGFILE)));
+        int count = 0;
+        String str = "";
+        while (is.available() != 0) {
+            str = is.readLine();
+            ++count;
+        }
+        assertTrue("Incorrect count " + count, count == 1);
+        assertTrue("Bad data", str.endsWith("This is a test"));
     }
 
 }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java?rev=1084027&r1=1084026&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java Mon Mar 21 23:47:06 2011
@@ -25,6 +25,7 @@ import org.apache.logging.log4j.core.Log
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.BasicConfigurationFactory;
 import org.apache.logging.log4j.core.appender.FileAppender;
+import org.apache.logging.log4j.core.appender.FileManager;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.util.Compare;
 import org.junit.AfterClass;
@@ -39,7 +40,7 @@ import static org.junit.Assert.assertTru
  *
  */
 public class PatternLayoutTest {
-    static String OUTPUT_FILE   = "output/PatternParser";
+    static String OUTPUT_FILE   = "target/output/PatternParser";
     static String WITNESS_FILE  = "witness/PatternParser";
     LoggerContext ctx = (LoggerContext) LogManager.getContext();
     Logger root = ctx.getLogger("");
@@ -74,8 +75,9 @@ public class PatternLayoutTest {
 
         // set up appender
         PatternLayout layout = new PatternLayout(msgPattern);
-        FileOutputStream fos = new FileOutputStream(OUTPUT_FILE + "_mdc");
-        FileAppender appender = new FileAppender("File", layout, null, fos, OUTPUT_FILE + "_mdc");
+        //FileOutputStream fos = new FileOutputStream(OUTPUT_FILE + "_mdc");
+        FileManager manager = FileManager.getFileManager(OUTPUT_FILE + "_mdc", false, false, false);
+        FileAppender appender = new FileAppender("File", layout, null, manager, OUTPUT_FILE + "_mdc", true, false);
         appender.start();
 
         // set appender on root and set level to debug
@@ -125,5 +127,7 @@ public class PatternLayoutTest {
         root.debug("finished mdc pattern test");
 
         assertTrue(Compare.compare(this.getClass(), OUTPUT_FILE + "_mdc", WITNESS_FILE + "_mdc"));
+
+        appender.stop();
     }
 }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java?rev=1084027&r1=1025816&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java Mon Mar 21 23:47:06 2011
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core.layout.pattern;
+package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.LoggerContext;
@@ -22,14 +22,12 @@ import org.apache.logging.log4j.core.Log
 
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.Assert;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import java.io.FileOutputStream;
 import java.util.List;
 
 /**

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/util/Profiler.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/util/Profiler.java?rev=1084027&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/util/Profiler.java (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/util/Profiler.java Mon Mar 21 23:47:06 2011
@@ -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.core.util;
+
+import java.lang.reflect.Field;
+
+/**
+ *
+ */
+public class Profiler {
+    private static Object profiler;
+    private static Class profilingModes;
+    private static Class controllerClazz;
+
+    static {
+        try {
+            controllerClazz = Class.forName("com.yourkit.api.Controller");
+            profilingModes = Class.forName("com.yourkit.api.ProfilingModes");
+            try {
+                profiler = controllerClazz.newInstance();
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.out.println("Profiler was active, but failed due: " + e.getMessage());
+            }
+        }
+        catch (Exception e) {
+            // Ignore
+        }
+
+    }
+
+    public static boolean isActive() {
+        return profiler != null;
+    }
+
+    public static void start() {
+
+        if (profiler != null) {
+            try {
+                Field f = profilingModes.getDeclaredField("CPU_SAMPLING");
+                Object[] args = new Object[2];
+                args[0] = f.getLong(profilingModes);
+                args[1] = "";
+                Class[] parms = new Class[] {long.class, String.class};
+                controllerClazz.getMethod("startCPUProfiling", parms).invoke(profiler, args);
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+                System.out.println("Profiler was active, but failed due: " + e.getMessage());
+            }
+        }
+    }
+
+    public static void stop() {
+        if (profiler != null) {
+            try {
+                Field f = profilingModes.getDeclaredField("SNAPSHOT_WITHOUT_HEAP");
+                Object[] args = new Object[1];
+                args[0] = f.getLong(profilingModes);
+                Class[] parms = new Class[] {long.class};
+                profiler.getClass().getMethod("captureSnapshot", parms).invoke(profiler, args);
+                profiler.getClass().getMethod("stopCPUProfiling").invoke(profiler);
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+                System.out.println("Profiler was active, but failed due: " + e.getMessage());
+            }
+        }
+    }
+}

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-test1.xml
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-test1.xml?rev=1084027&r1=1084026&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-test1.xml (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-test1.xml Mon Mar 21 23:47:06 2011
@@ -11,7 +11,7 @@
     <Console name="STDOUT">
       <PatternLayout pattern="%m%n"/>
     </Console>
-    <File name="File" fileName="${filename}">
+    <File name="File" fileName="${filename}" bufferedIO="false">
       <PatternLayout>
         <pattern>%d %p %C{1.} [%t] %m%n</pattern>
       </PatternLayout>

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j12-perf.xml
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j12-perf.xml?rev=1084027&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j12-perf.xml (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j12-perf.xml Mon Mar 21 23:47:06 2011
@@ -0,0 +1,14 @@
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+ <appender name="TestLogfile" class="org.apache.log4j.FileAppender">
+   <param name="File" value="target/testlog4j.log"/>
+   <param name="immediateFlush" value="false"/>
+   <layout class="org.apache.log4j.PatternLayout">
+     <param name="ConversionPattern" value="%d{ISO8601} %5p [%t] %c{1} %X{transactionId} - %m%n"/>
+   </layout>
+ </appender>
+ <root>
+   <level value="debug"/>
+   <appender-ref ref="TestLogfile"/>
+ </root>
+</log4j:configuration>
\ No newline at end of file

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j2-perf.xml
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j2-perf.xml?rev=1084027&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j2-perf.xml (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j2-perf.xml Mon Mar 21 23:47:06 2011
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration packages="" name="XMLPerfTest" status="error">
+  <appenders>
+    <File name="TestLogfile" fileName="target/testlog4j2.log" immediateFlush="false">
+      <PatternLayout>
+        <pattern>%d{ISO8601} %5p [%t] %c{1} %X{transactionId} - %m%n</pattern>
+      </PatternLayout>
+    </File>
+  </appenders>
+  <loggers>
+    <root level="debug">
+      <appender-ref ref="TestLogfile"/>
+    </root>
+  </loggers>
+</configuration>
\ No newline at end of file

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/logback-perf.xml
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/logback-perf.xml?rev=1084027&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/logback-perf.xml (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/logback-perf.xml Mon Mar 21 23:47:06 2011
@@ -0,0 +1,12 @@
+<configuration>
+ <appender name="TestLogfile" class="ch.qos.logback.core.FileAppender">
+   <file>target/testlogback.log</file>
+   <encoder>
+     <Pattern>%d{ISO8601} %5p [%t] %c{0} %X{transactionId} - %m%n</Pattern>
+   </encoder>
+ </appender>
+
+ <root level="debug">
+   <appender-ref ref="TestLogfile" />
+ </root>
+</configuration>
\ No newline at end of file

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml?rev=1084027&r1=1084026&r2=1084027&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml Mon Mar 21 23:47:06 2011
@@ -23,6 +23,11 @@
   <packaging>pom</packaging>
   <name>Apache Log4j 2</name>
   <version>1.99.0-SNAPSHOT</version>
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>9</version>
+  </parent>
   <description>Apache Log4j 2</description>
   <url>http://logging.apache.org/log4j/2.0/</url>
   <issueManagement>
@@ -77,6 +82,7 @@
   </organization>
   <properties>
     <slf4j.version>1.6.1</slf4j.version>
+    <logback.version>0.9.28</logback.version>
   </properties>
   <dependencyManagement>
     <dependencies>
@@ -91,6 +97,16 @@
         <version>${slf4j.version}</version>
       </dependency>
       <dependency>
+        <groupId>ch.qos.logback</groupId>
+        <artifactId>logback-core</artifactId>
+        <version>${logback.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>ch.qos.logback</groupId>
+        <artifactId>logback-classic</artifactId>
+        <version>${logback.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.apache.logging</groupId>
         <artifactId>log4j2-api</artifactId>
         <version>${project.version}</version>



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org