[prev in list] [next in list] [prev in thread] [next in thread] 

List:       log4j-dev
Subject:    svn commit: r533406 [2/2] - in /logging/sandbox/experimental/pattern-layout:
From:       carnold () apache ! org
Date:       2007-04-28 18:43:40
Message-ID: 20070428184342.AA9271A983E () eris ! apache ! org
[Download RAW message or body]

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/DateLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/DatePatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/DateLayout.java?view=diff&rev=533406&p1=logging/sandb \
ox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/DatePatternConve \
rter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/DateLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/DatePatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/DateLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,149 +14,49 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
-
+import org.apache.logging.core.LogRecord;
+import org.apache.logging.core.*;
+import java.text.DateFormat;
+import java.util.Locale;
+import java.io.IOException;
 
 /**
- * Convert and format the event's date in a StringBuffer.
+ * Abstract base layout of any layout that extracts
+ * a Date and formats using a java.text.DateFormat.
  *
- * @author Ceki Gülcü
- * @since 1.3
  */
-public final class DatePatternConverter extends LoggingEventPatternConverter {
-    /**
-     * ABSOLUTE string literal.
-     */
-  private static final String ABSOLUTE_FORMAT = "ABSOLUTE";
-    /**
-     * SimpleTimePattern for ABSOLUTE.
-     */
-  private static final String ABSOLUTE_TIME_PATTERN = "HH:mm:ss,SSS";
+public abstract class DateLayout<T extends Appendable>
+        implements Layout<T> {
 
+    private final DateFormat format;
 
     /**
-     * DATE string literal.
+     * Create new instance.
      */
-  private static final String DATE_AND_TIME_FORMAT = "DATE";
-    /**
-     * SimpleTimePattern for DATE.
-     */
-  private static final String DATE_AND_TIME_PATTERN = "dd MMM yyyy HH:mm:ss,SSS";
-
-    /**
-     * ISO8601 string literal.
-     */
-  private static final String ISO8601_FORMAT = "ISO8601";
-    /**
-     * SimpleTimePattern for ISO8601.
-     */
-  private static final String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS";
-  /**
-   * Date format.
-   */
-  private final CachedDateFormat df;
-
-  /**
-   * Private constructor.
-   * @param options options, may be null.
-   */
-  private DatePatternConverter(final String[] options) {
-    super("Date", "date");
-
-    String patternOption;
-
-    if ((options == null) || (options.length == 0)) {
-      // the branch could be optimized, but here we are making explicit
-      // that null values for patternOption are allowed.
-      patternOption = null;
-    } else {
-      patternOption = options[0];
+    public DateLayout(DateFormat fmt) {
+        if (fmt == null) {
+            throw new NullPointerException("fmt");
+        }
+        format = fmt;
     }
 
-    String pattern;
 
-    if (
-      (patternOption == null)
-        || patternOption.equalsIgnoreCase(ISO8601_FORMAT)) {
-      pattern = ISO8601_PATTERN;
-    } else if (patternOption.equalsIgnoreCase(ABSOLUTE_FORMAT)) {
-      pattern = ABSOLUTE_TIME_PATTERN;
-    } else if (patternOption.equalsIgnoreCase(DATE_AND_TIME_FORMAT)) {
-      pattern = DATE_AND_TIME_PATTERN;
-    } else {
-      pattern = patternOption;
-    }
-
-    int maximumCacheValidity = 1000;
-    SimpleDateFormat simpleFormat = null;
-
-    try {
-      simpleFormat = new SimpleDateFormat(pattern);
-      maximumCacheValidity = CachedDateFormat.getMaximumCacheValidity(pattern);
-    } catch (IllegalArgumentException e) {
-        LogLog.warn(
-          "Could not instantiate SimpleDateFormat with pattern "
-          + patternOption, e);
-
-      // default to the ISO8601 format
-      simpleFormat = new SimpleDateFormat(ISO8601_PATTERN);
-    }
-
-    // if the option list contains a TZ option, then set it.
-    if ((options != null) && (options.length > 1)) {
-      TimeZone tz = TimeZone.getTimeZone((String) options[1]);
-      simpleFormat.setTimeZone(tz);
-    }
-
-    df = new CachedDateFormat(simpleFormat, maximumCacheValidity);
-  }
-
-  /**
-   * Obtains an instance of pattern converter.
-   * @param options options, may be null.
-   * @return instance of pattern converter.
-   */
-  public static DatePatternConverter newInstance(
-    final String[] options) {
-    return new DatePatternConverter(options);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer output) {
-    synchronized(this) {
-    	df.format(event.timeStamp, output);
+    /**
+     * {@inheritDoc}
+     */
+    public void render(Object extract, Locale locale, T destination)
+        throws IOException {
+        destination.append(format.format(extract));
     }
-  }
 
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final Object obj, final StringBuffer output) {
-    if (obj instanceof Date) {
-      format((Date) obj, output);
+    /**
+     * {@inheritDoc}
+     */
+    public void format(LogRecord record, Locale locale, T destination)
+        throws IOException {
+        render(extract(record), locale, destination);
     }
 
-    super.format(obj, output);
-  }
-
-  /**
-   * Append formatted date to string buffer.
-   * @param date date
-   * @param toAppendTo buffer to which formatted date is appended.
-   */
-  public void format(final Date date, final StringBuffer toAppendTo) {
-    synchronized(this) {
-    	df.format(date.getTime(), toAppendTo);
-    }
-  }
 }

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/DecoratorLayout.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/DecoratorLayout.java?view=auto&rev=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/DecoratorLayout.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/DecoratorLayout.java \
Sat Apr 28 11:43:37 2007 @@ -0,0 +1,83 @@
+/*
+ * 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.pattern;
+
+import org.apache.logging.core.Layout;
+import org.apache.logging.core.LogRecord;
+import org.apache.logging.core.LoggingException;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Locale;
+
+/**
+ *  Abstract base classes for Layouts that modify the
+ * rendered content from another layout.
+ *
+ */
+public abstract class DecoratorLayout
+        implements Layout<StringBuilder>, Serializable {
+
+    private final Layout<StringBuilder> nested;
+
+    protected DecoratorLayout(final Layout<StringBuilder> nested) {
+        if (nested == null) {
+            throw new NullPointerException("nested");
+        }
+        this.nested = nested;
+    }
+
+    /** {*inheritDoc} */
+    public Object extract(final LogRecord record) {
+        return nested.extract(record);
+    }
+
+
+    /**
+     * Modifies content rendered by nested layout.
+     * @param extract extract.
+     * @param locale locale.
+     * @param destination destination.
+     * @param initialPos position of destination before
+     *    nested layout was rendered.
+     */
+    protected abstract void decorate(final Object extract,
+                            final Locale locale,
+                            final StringBuilder destination,
+                            final int initialPos);
+    /**
+     * {@inheritDoc}
+     */
+    public void render(final Object extract,
+                       final Locale locale,
+                       final StringBuilder destination)
+        throws IOException, LoggingException {
+        int initialPos = destination.length();
+        nested.render(extract, locale, destination);
+        decorate(extract, locale, destination, initialPos);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void format(LogRecord record, Locale locale,
+                       StringBuilder destination)
+        throws IOException, LoggingException {
+        render(extract(record), locale, destination);
+    }
+
+}

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/FieldLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/FormattingInfo.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/FieldLayout.java?view=diff&rev=533406&p1=logging/sand \
box/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/FormattingInfo. \
java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/FieldLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/FormattingInfo.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/FieldLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,122 +14,42 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
+import org.apache.logging.core.Layout;
+import org.apache.logging.core.LogRecord;
+import org.apache.logging.core.LoggingException;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Locale;
 
 /**
- * Modifies the output of a pattern converter for a specified minimum
- * and maximum width and alignment.
- *
+ * Class handles justification and truncation of fields.
  *
- *  @author <a href=mailto:jim_cakalic@na.biomerieux.com>Jim Cakalic</a>
- *  @author Ceki G&uuml;lc&uuml;
- *  @author Curt Arnold
  *
- *  @since 1.3
  */
-public final class FormattingInfo {
-  /**
-   *  Array of spaces.
-   */
-  private static final char[] SPACES =
-    new char[] { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' };
-
-  /**
-   * Default instance.
-   */
-  private static final FormattingInfo DEFAULT =
-    new FormattingInfo(false, 0, Integer.MAX_VALUE);
-
-  /**
-   * Minimum length.
-   */
-  private final int minLength;
-
-  /**
-   * Maximum length.
-   */
-  private final int maxLength;
-
-  /**
-   * Alignment.
-   */
-  private final boolean leftAlign;
-
-  /**
-   * Creates new instance.
-   * @param leftAlign left align if true.
-   * @param minLength minimum length.
-   * @param maxLength maximum length.
-   */
-  public FormattingInfo(
-    final boolean leftAlign, final int minLength, final int maxLength) {
-    this.leftAlign = leftAlign;
-    this.minLength = minLength;
-    this.maxLength = maxLength;
-  }
-
-  /**
-   * Gets default instance.
-   * @return default instance.
-   */
-  public static FormattingInfo getDefault() {
-    return DEFAULT;
-  }
-
-  /**
-   * Determine if left aligned.
-   * @return true if left aligned.
-   */
-  public boolean isLeftAligned() {
-    return leftAlign;
-  }
-
-  /**
-   * Get minimum length.
-   * @return minimum length.
-   */
-  public int getMinLength() {
-    return minLength;
-  }
-
-  /**
-   * Get maximum length.
-   * @return maximum length.
-   */
-  public int getMaxLength() {
-    return maxLength;
-  }
-
-  /**
-   * Adjust the content of the buffer based on the specified lengths and alignment.
-   *
-   * @param fieldStart start of field in buffer.
-   * @param buffer buffer to be modified.
-   */
-  public void format(final int fieldStart, final StringBuffer buffer) {
-    final int rawLength = buffer.length() - fieldStart;
-
-    if (rawLength > maxLength) {
-      buffer.delete(fieldStart, buffer.length() - maxLength);
-    } else if (rawLength < minLength) {
-      if (leftAlign) {
-        final int fieldEnd = buffer.length();
-        buffer.setLength(fieldStart + minLength);
-
-        for (int i = fieldEnd; i < buffer.length(); i++) {
-          buffer.setCharAt(i, ' ');
-        }
-      } else {
-        int padLength = minLength - rawLength;
-
-        for (; padLength > 8; padLength -= 8) {
-          buffer.insert(fieldStart, SPACES);
-        }
+public final class FieldLayout extends DecoratorLayout {
+
+    private final int width;
+    private final boolean leftJustify;
+
+    public FieldLayout(final Layout<StringBuilder> nested,
+                       final int width,
+                       final boolean leftJustify) {
+        super(nested);
+        this.width = width;
+        this.leftJustify = leftJustify;
 
-        buffer.insert(fieldStart, SPACES, 0, padLength);
-      }
     }
-  }
+
+    /**  {@inheritDoc} */
+    protected void decorate(final Object extract,
+                            final Locale locale,
+                            final StringBuilder destination,
+                            final int initialPos) {
+
+    }
+
+
 }

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LevelLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LevelPatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/LevelLayout.java?view=diff&rev=533406&p1=logging/sand \
box/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LevelPatternCon \
verter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LevelLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LevelPatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LevelLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,81 +14,29 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.spi.LoggingEvent;
-
+import org.apache.logging.core.LogRecord;
 
 /**
- * Return the event's level in a StringBuffer.
+ * This layout appends the level of the log request.
  *
- * @author Ceki G&uuml;lc&uuml;
- * @since 1.3
+ * @PatternSpecifier("p", "level")
+ * @Immutable
  */
-public final class LevelPatternConverter extends LoggingEventPatternConverter {
-  /**
-   * Singleton.
-   */
-  private static final LevelPatternConverter INSTANCE =
-    new LevelPatternConverter();
-
-  /**
-   * Private constructor.
-   */
-  private LevelPatternConverter() {
-    super("Level", "level");
-  }
-
-  /**
-   * Obtains an instance of pattern converter.
-   * @param options options, may be null.
-   * @return instance of pattern converter.
-   */
-  public static LevelPatternConverter newInstance(
-    final String[] options) {
-    return INSTANCE;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer output) {
-    output.append(event.getLevel().toString());
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public String getStyleClass(Object e) {
-    if (e instanceof LoggingEvent) {
-      int lint = ((LoggingEvent) e).getLevel().toInt();
-
-      switch (lint) {
-      case Level.TRACE_INT:
-        return "level trace";
+public final class LevelLayout<T extends Appendable>
+        extends LocalizableLayout<T> {
 
-      case Level.DEBUG_INT:
-        return "level debug";
-
-      case Level.INFO_INT:
-        return "level info";
-
-      case Level.WARN_INT:
-        return "level warn";
-
-      case Level.ERROR_INT:
-        return "level error";
-
-      case Level.FATAL_INT:
-        return "level fatal";
-
-      default:
-        return "level " + ((LoggingEvent) e).getLevel().toString();
-      }
+    /**
+     * Create new instance.
+     */
+    public LevelLayout() {
     }
 
-    return "level";
-  }
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        return record.getLevel();
+    }
 }

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LineSeparatorLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LineSeparatorPatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/LineSeparatorLayout.java?view=diff&rev=533406&p1=logg \
ing/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LineSep \
aratorPatternConverter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LineSeparatorLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LineSeparatorPatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LineSeparatorLayout.java \
Sat Apr 28 11:43:37 2007 @@ -15,60 +15,60 @@
  * limitations under the License.
  */
 
-package org.apache.log4j.pattern;
+package org.apache.logging.pattern;
 
-import org.apache.log4j.Layout;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.core.Layout;
+import org.apache.logging.core.LogRecord;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Locale;
 
 
 /**
- * Formats a line separator.
+ * Appends a line separator to the destination.
  *
- * @author Ceki G&uuml;lc&uuml;
- * @since 1.3
+ * @PatternSpecifier("n")
+ * @Immutable
  */
-public final class LineSeparatorPatternConverter
-  extends LoggingEventPatternConverter {
-  /**
-   * Singleton.
-   */
-  private static final LineSeparatorPatternConverter INSTANCE =
-    new LineSeparatorPatternConverter();
-
+public final class LineSeparatorLayout<T extends Appendable>
+        implements Layout<T>, Serializable {
   /**
    * Line separator.
    */
-  private final String lineSep;
+  private final transient String lineSep;
 
   /**
-   * Private constructor.
+   * Create a new instance.
    */
-  private LineSeparatorPatternConverter() {
-    super("Line Sep", "lineSep");
-    lineSep = Layout.LINE_SEP;
+  public LineSeparatorLayout() {
+    String sep = "\n";
+    try {
+        sep = System.getProperty("line.separator");
+    } catch(Exception ex) {
+    }
+    lineSep = sep;
   }
 
-  /**
-   * Obtains an instance of pattern converter.
-   * @param options options, may be null.
-   * @return instance of pattern converter.
-   */
-  public static LineSeparatorPatternConverter newInstance(
-    final String[] options) {
-    return INSTANCE;
+  /** {@inheritDoc} */
+  public Object extract(final LogRecord record) {
+      return lineSep;
   }
 
-  /**
-   * {@inheritDoc}
-   */
-  public void format(LoggingEvent event, final StringBuffer toAppendTo) {
-    toAppendTo.append(lineSep);
-  }
+    /**
+     * {@inheritDoc}
+     */
+    public void render(Object extract, Locale locale, T destination)
+        throws IOException {
+        destination.append(lineSep);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void format(LogRecord record, Locale locale, T destination)
+        throws IOException {
+        destination.append(lineSep);
+    }
 
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final Object obj, final StringBuffer toAppendTo) {
-    toAppendTo.append(lineSep);
-  }
 }

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LiteralLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LiteralPatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/LiteralLayout.java?view=diff&rev=533406&p1=logging/sa \
ndbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LiteralPatter \
nConverter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LiteralLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LiteralPatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LiteralLayout.java \
Sat Apr 28 11:43:37 2007 @@ -15,19 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.log4j.pattern;
+package org.apache.logging.pattern;
 
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.core.LogRecord;
+
+import java.io.Serializable;
 
 
 /**
- * Formats a string literal.
- *
- * @author Curt Arnold
- * @since 1.3
+ * Layouts a string literal.
  *
+ * @Immutable
  */
-public final class LiteralPatternConverter extends LoggingEventPatternConverter {
+public final class LiteralLayout<T extends Appendable>
+        extends StringLayout<T> implements Serializable {
   /**
    * String literal.
    */
@@ -37,22 +38,12 @@
    * Create a new instance.
    * @param literal string literal.
    */
-  public LiteralPatternConverter(final String literal) {
-    super("Literal", "literal");
+  public LiteralLayout(final String literal) {
     this.literal = literal;
   }
 
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
-    toAppendTo.append(literal);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final Object obj, final StringBuffer toAppendTo) {
-    toAppendTo.append(literal);
+  /** {@inheritDoc} */
+  public Object extract(final LogRecord record) {
+      return literal;
   }
 }

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LocalizableLayout.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LocalizableLayout.java?view=auto&rev=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LocalizableLayout.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LocalizableLayout.java \
Sat Apr 28 11:43:37 2007 @@ -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.pattern;
+
+import org.apache.logging.core.Layout;
+import org.apache.logging.core.Localizable;
+import org.apache.logging.core.LogRecord;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Locale;
+
+public abstract class LocalizableLayout<T extends Appendable>
+        implements Layout<T>, Serializable {
+
+    protected LocalizableLayout() {
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void render(Object extract, Locale locale, T destination)
+        throws IOException {
+        if (extract instanceof Localizable) {
+            destination.append(((Localizable) extract).getLocalizedName(locale));
+        }
+        destination.append(String.valueOf(extract));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void format(LogRecord record, Locale locale, T destination)
+        throws IOException {
+        render(extract(record), locale, destination);
+    }
+
+}

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LogRecordDateLayout.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LogRecordDateLayout.java?view=auto&rev=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LogRecordDateLayout.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LogRecordDateLayout.java \
Sat Apr 28 11:43:37 2007 @@ -0,0 +1,70 @@
+/*
+ * 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.pattern;
+
+import org.apache.logging.core.LogRecord;
+import org.apache.logging.core.*;
+import java.text.DateFormat;
+import java.util.Locale;
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ *
+ * @PatternSpecifier("d", "date")
+ */
+public final class LogRecordDateLayout<T extends Appendable>
+        implements Layout<T> {
+
+    private final DateFormat format;
+
+    /**
+     * Create new instance.
+     */
+    public LogRecordDateLayout(final DateFormat fmt) {
+        if (fmt == null) {
+            throw new NullPointerException("fmt");
+        }
+        format = fmt;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        return record.getMillis();
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void render(Object extract, Locale locale, T destination)
+        throws IOException {
+        destination.append(format.format(
+                new Date(((Long) extract).longValue())));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void format(LogRecord record, Locale locale, T destination)
+        throws IOException {
+        render(extract(record), locale, destination);
+    }
+
+}

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LoggerNameLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LoggerPatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/LoggerNameLayout.java?view=diff&rev=533406&p1=logging \
/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LoggerPatt \
ernConverter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LoggerNameLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/LoggerPatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/LoggerNameLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,54 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
-import org.apache.log4j.spi.LoggingEvent;
-
+import org.apache.logging.core.LogRecord;
 
 /**
- * Formats a logger name.
- *
- * @author Ceki G&uuml;lc&uuml;
+ * This layout appends the logger associated with the log request.
  *
- * @since 1.3
+ * @PatternSpecifier("c", "logger");
  */
-public final class LoggerPatternConverter extends NamePatternConverter {
-  /**
-   * Singleton.
-   */
-  private static final LoggerPatternConverter INSTANCE =
-    new LoggerPatternConverter(null);
+public final class LoggerNameLayout<T extends Appendable>
+        extends StringLayout<T> {
 
-  /**
-   * Private constructor.
-   * @param options options, may be null.
-   */
-  private LoggerPatternConverter(final String[] options) {
-    super("Logger", "logger", options);
-  }
-
-  /**
-   * Obtains an instance of pattern converter.
-   * @param options options, may be null.
-   * @return instance of pattern converter.
-   */
-  public static LoggerPatternConverter newInstance(
-    final String[] options) {
-    if ((options == null) || (options.length == 0)) {
-      return INSTANCE;
+    /**
+     * Create new instance.
+     */
+    public LoggerNameLayout() {
     }
 
-    return new LoggerPatternConverter(options);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
-    final int initialLength = toAppendTo.length();
-    toAppendTo.append(event.getLoggerName());
-    abbreviate(initialLength, toAppendTo);
-  }
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        return record.getLoggerName();
+    }
 }

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/MessageLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/MessagePatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/MessageLayout.java?view=diff&rev=533406&p1=logging/sa \
ndbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/MessagePatter \
nConverter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/MessageLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/MessagePatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/MessageLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,46 +14,29 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
-import org.apache.log4j.spi.LoggingEvent;
-
+import org.apache.logging.core.LogRecord;
 
 /**
- * Return the event's rendered message in a StringBuffer.
+ * This layout appends the message of the log request.
  *
- * @author Ceki G&uuml;lc&uuml;
- * @since 1.3
+ * @PatternSpecifier("m", "message")
+ * @Immutable
  */
-public final class MessagePatternConverter extends LoggingEventPatternConverter {
-  /**
-   * Singleton.
-   */
-  private static final MessagePatternConverter INSTANCE =
-    new MessagePatternConverter();
-
-  /**
-   * Private constructor.
-   */
-  private MessagePatternConverter() {
-    super("Message", "message");
-  }
-
-  /**
-   * Obtains an instance of pattern converter.
-   * @param options options, may be null.
-   * @return instance of pattern converter.
-   */
-  public static MessagePatternConverter newInstance(
-    final String[] options) {
-    return INSTANCE;
-  }
+public final class MessageLayout<T extends Appendable>
+        extends LocalizableLayout<T> {
 
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
-    toAppendTo.append(event.getRenderedMessage());
-  }
+    /**
+     * Create new instance.
+     */
+    public MessageLayout() {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        return record.getMessage();
+    }
 }

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PatternLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/EnhancedPatternLayout.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/PatternLayout.java?view=diff&rev=533406&p1=logging/sa \
ndbox/experimental/pattern-layout/src/main/java/org/apache/log4j/EnhancedPatternLayout \
.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PatternLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/EnhancedPatternLayout.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PatternLayout.java \
Sat Apr 28 11:43:37 2007 @@ -21,6 +21,7 @@
 import org.apache.log4j.helpers.PatternConverter;
 import org.apache.log4j.pattern.BridgePatternConverter;
 import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.*;
 
 
 // Contributors:   Nelson Minar <nelson@monkey.org>
@@ -404,7 +405,7 @@
 
 
    @since 0.8.2 */
-public class EnhancedPatternLayout extends Layout {
+public class PatternLayout extends Layout {
   /** Default pattern string for log output. Currently set to the
       string <b>"%m%n"</b> which just prints the application supplied
       message. */
@@ -454,7 +455,7 @@
 
      The default pattern just produces the application supplied message.
   */
-  public EnhancedPatternLayout() {
+  public PatternLayout() {
     this(DEFAULT_CONVERSION_PATTERN);
   }
 
@@ -462,7 +463,7 @@
     * Constructs a EnhancedPatternLayout using the supplied conversion pattern.
    * @param pattern conversion pattern.
   */
-  public EnhancedPatternLayout(final String pattern) {
+  public PatternLayout(final String pattern) {
     this.conversionPattern = pattern;
     head = createPatternParser(
             (pattern == null) ? DEFAULT_CONVERSION_PATTERN : pattern).parse();

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PatternSpecifier.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PatternSpecifier.java?view=auto&rev=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PatternSpecifier.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PatternSpecifier.java \
Sat Apr 28 11:43:37 2007 @@ -0,0 +1,21 @@
+package org.apache.logging.pattern;
+
+/*
+* 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.
+*/
+public @interface PatternSpecifier {
+    String[] getSpecifiers();
+}

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PropertiesContextLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/PropertiesPatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/PropertiesContextLayout.java?view=diff&rev=533406&p1= \
logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/Pro \
pertiesPatternConverter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PropertiesContextLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/PropertiesPatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/PropertiesContextLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,155 +14,79 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.lang.reflect.*;
-import java.util.Iterator;
-import java.util.Set;
-import org.apache.log4j.helpers.*;
+import org.apache.logging.core.Layout;
+import org.apache.logging.core.LogRecord;
 
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Locale;
+import org.apache.logging.core.*;
+import java.util.*;
 
 /**
- * Able to handle the contents of the LoggingEvent's Property bundle and either
- * output the entire contents of the properties in a similar format to the
- * java.util.Hashtable.toString(), or to output the value of a specific key
- * within the property bundle
- * when this pattern converter has the option set.
+ * Abstract class for any layout that extracts a
+ * string from the log record and writes to an Appendable.
  *
- * @author Paul Smith
- * @author Ceki G&uuml;lc&uuml;
- *@since 1.3
+ * @PatternSpecifier("x");
  */
-public final class PropertiesPatternConverter
-  extends LoggingEventPatternConverter {
-  /**
-   * Name of property to output.
-   */
-  private final String option;
-  private final Method getKeySetMethod;
-
-  /**
-   * Private constructor.
-   * @param options options, may be null.
-   */
-  private PropertiesPatternConverter(
-    final String[] options) {
-    super(
-      ((options != null) && (options.length > 0))
-      ? ("Property{" + options[0] + "}") : "Properties", "property");
-
-      //
-      //  log4j 1.2.15 and later will have method to get names
-      //     of all keys in MDC
-      //
-    Method getMethod = null;
-
-    if ((options != null) && (options.length > 0)) {
-      option = options[0];
-    } else {
-      option = null;
-      try {
-         getMethod = LoggingEvent.class.getMethod(
-                    "getPropertyKeySet", null);
-      } catch(Exception ex) {
-          getMethod = null;
-      }
+public final class PropertiesContextLayout<T extends Appendable>
+        implements Layout<T>, Serializable {
+
+    private final String key;
+
+    /**
+     * Output all properties from context.
+     */
+    public PropertiesContextLayout() {
+        key = null;
+    }
+
+    /**
+     * Output one property.
+     */
+    public PropertiesContextLayout(final String key) {
+        this.key = key;
     }
-    getKeySetMethod = getMethod;
-  }
 
-  /**
-   * Obtains an instance of PropertiesPatternConverter.
-   * @param options options, may be null or first element contains name of property \
                to format.
-   * @return instance of PropertiesPatternConverter.
-   */
-  public static PropertiesPatternConverter newInstance(
-    final String[] options) {
-    return new PropertiesPatternConverter(options);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
-    // if there is no additional options, we output every single
-    // Key/Value pair for the MDC in a similar format to Hashtable.toString()
-    if (option == null) {
-      toAppendTo.append("{");
-
-      //
-      //  MDC keys are not visible prior to log4j 1.2.15
-      //
-      Set keySet = null;
-      if (getKeySetMethod != null) {
-          try {
-            keySet = (Set) getKeySetMethod.invoke(event, null);
-          } catch(InvocationTargetException ex) {
-              LogLog.error("Exception while calling LoggingEvent.getKeySetMethod",
-                      ex.getTargetException());
-          } catch(Exception ex) {
-              LogLog.error("Exception while calling LoggingEvent.getKeySetMethod",
-                      ex);
-          }
-      } else {
-          //
-          //  for 1.2.14 and earlier could serialize and
-          //    extract MDC content
-          try {
-            ByteArrayOutputStream outBytes = new ByteArrayOutputStream();
-            ObjectOutputStream os = new ObjectOutputStream(outBytes);
-            os.writeObject(event);
-            os.close();
-
-            byte[] raw = outBytes.toByteArray();
-            //
-            //   bytes 6 and 7 should be the length of the original classname
-            //     should be the same as our substitute class name
-            final String subClassName = LogEvent.class.getName();
-            if (raw[6] == 0 || raw[7] == subClassName.length()) {
-                //
-                //  manipulate stream to use our class name
-                //
-                for (int i = 0; i < subClassName.length(); i++) {
-                    raw[8 + i] = (byte) subClassName.charAt(i);
-                }
-                ByteArrayInputStream inBytes = new ByteArrayInputStream(raw);
-                ObjectInputStream is = new ObjectInputStream(inBytes);
-                Object cracked = is.readObject();
-                if (cracked instanceof LogEvent) {
-                    keySet = ((LogEvent) cracked).getPropertyKeySet();
-                }
-                is.close();
+    public Object extract(final LogRecord record) {
+        Object context = record.getContext();
+        if (context instanceof PropertyContext) {
+            PropertyContext properties = (PropertyContext) context;
+            if (key == null) {
+                return new HashMap<String, Object>(properties.getProperties());
+            } else {
+                return properties.getProperties().get(key);
             }
-          } catch(Exception ex) {
-              LogLog.error("Unexpected exception while extracting MDC keys", ex);
-          }
-      }
-
-      if (keySet != null) {
-        for (Iterator i = keySet.iterator(); i.hasNext();) {
-            Object item = i.next();
-            Object val = event.getMDC(item.toString());
-            toAppendTo.append("{").append(item).append(",").append(val).append(
-            "}");
         }
-      }
+        return null;
+    }
+    /**
+     * {@inheritDoc}
+     */
+    public void render(Object extract, Locale locale, T destination)
+        throws IOException {
+        if (extract instanceof String) {
+            destination.append(extract.toString());
+        } else if (extract != null) {
+            Map<String, Object> properties = (Map<String, Object>) extract;
+            destination.append('{');
+            for(Map.Entry<String, Object> entry : properties.entrySet()) {
+                destination.append(entry.getKey());
+                destination.append(',');
+                destination.append(String.valueOf(entry.getValue()));
+            }
+            destination.append('}');
+        }
+    }
 
-      toAppendTo.append("}");
-    } else {
-      // otherwise they just want a single key output
-      Object val = event.getMDC(option);
-
-      if (val != null) {
-        toAppendTo.append(val);
-      }
+    /**
+     * {@inheritDoc}
+     */
+    public void format(LogRecord record, Locale locale, T destination)
+        throws IOException {
+        render(extract(record), locale, destination);
     }
-  }
+
 }

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceClassNameLayout.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceClassNameLayout.java?view=auto&rev=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceClassNameLayout.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceClassNameLayout.java \
Sat Apr 28 11:43:37 2007 @@ -0,0 +1,46 @@
+/*
+ * 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.pattern;
+
+import org.apache.logging.core.LogRecord;
+
+/**
+ * This layout appends the class name of the
+ * source of the log request.
+ *
+ * @PatternSpecifier("C", "classname");
+ */
+public final class SourceClassNameLayout<T extends Appendable>
+        extends StringLayout<T> {
+
+    /**
+     * Create new instance.
+     */
+    public SourceClassNameLayout() {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        StackTraceElement location = record.getSource();
+        if (location != null) {
+            return location.getClassName();
+        }
+        return null;
+    }
+}

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceFileNameLayout.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceFileNameLayout.java?view=auto&rev=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceFileNameLayout.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceFileNameLayout.java \
Sat Apr 28 11:43:37 2007 @@ -0,0 +1,46 @@
+/*
+ * 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.pattern;
+
+import org.apache.logging.core.LogRecord;
+
+/**
+ * This layout appends the method name of the
+ * source of the log request.
+ *
+ * @PatternSpecifier("L", "line");
+ */
+public final class SourceFileNameLayout<T extends Appendable>
+        extends StringLayout<T> {
+
+    /**
+     * Create new instance.
+     */
+    public SourceFileNameLayout() {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        StackTraceElement location = record.getSource();
+        if (location != null) {
+            return location.getFileName();
+        }
+        return null;
+    }
+}

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceLineNumberLayout.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/SourceLineNumberLayout.java?view=auto&rev=533406 \
                ==============================================================================
                
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceLineNumberLayout.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceLineNumberLayout.java \
Sat Apr 28 11:43:37 2007 @@ -0,0 +1,46 @@
+/*
+ * 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.pattern;
+
+import org.apache.logging.core.LogRecord;
+
+/**
+ * This layout appends the line number of the
+ * source of the log request.
+ *
+ * @PatternSpecifier("L", "line");
+ */
+public final class SourceLineNumberLayout<T extends Appendable>
+        extends StringLayout<T> {
+
+    /**
+     * Create new instance.
+     */
+    public SourceLineNumberLayout() {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        StackTraceElement location = record.getSource();
+        if (location != null) {
+            return location.getLineNumber();
+        }
+        return null;
+    }
+}

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceMethodNameLayout.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/SourceMethodNameLayout.java?view=auto&rev=533406 \
                ==============================================================================
                
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceMethodNameLayout.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/SourceMethodNameLayout.java \
Sat Apr 28 11:43:37 2007 @@ -0,0 +1,46 @@
+/*
+ * 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.pattern;
+
+import org.apache.logging.core.LogRecord;
+
+/**
+ * This layout appends the method name of the
+ * source of the log request.
+ *
+ * @PatternSpecifier("M", "method");
+ */
+public final class SourceMethodNameLayout<T extends Appendable>
+        extends StringLayout<T> {
+
+    /**
+     * Create new instance.
+     */
+    public SourceMethodNameLayout() {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        StackTraceElement location = record.getSource();
+        if (location != null) {
+            return location.getMethodName();
+        }
+        return null;
+    }
+}

Added: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/StringLayout.java
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/StringLayout.java?view=auto&rev=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/StringLayout.java \
                (added)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/StringLayout.java \
Sat Apr 28 11:43:37 2007 @@ -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.pattern;
+
+import org.apache.logging.core.Layout;
+import org.apache.logging.core.LogRecord;
+
+import java.io.IOException;
+import java.util.Locale;
+
+/**
+ * Abstract class for any layout that extracts a
+ * string from the log record and writes to an Appendable.
+ *
+ *
+ */
+public abstract class StringLayout<T extends Appendable>
+        implements Layout<T> {
+    protected StringLayout() {
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void render(Object extract, Locale locale, T destination)
+        throws IOException {
+        destination.append(String.valueOf(extract));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void format(LogRecord record, Locale locale, T destination)
+        throws IOException {
+        render(extract(record), locale, destination);
+    }
+
+}

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ThreadNameLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/ThreadPatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/ThreadNameLayout.java?view=diff&rev=533406&p1=logging \
/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/ThreadPatt \
ernConverter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ThreadNameLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/ThreadPatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ThreadNameLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,46 +14,29 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
-import org.apache.log4j.spi.LoggingEvent;
-
+import org.apache.logging.core.LogRecord;
 
 /**
- * Formats the event thread name.
+ * This layout appends the method name of the
+ * source of the log request.
  *
- * @author Ceki G&uuml;lc&uuml;
- * @since 1.3
+ * @PatternSpecifier("M", "method");
  */
-public class ThreadPatternConverter extends LoggingEventPatternConverter {
-  /**
-   * Singleton.
-   */
-  private static final ThreadPatternConverter INSTANCE =
-    new ThreadPatternConverter();
-
-  /**
-   * Private constructor.
-   */
-  private ThreadPatternConverter() {
-    super("Thread", "thread");
-  }
-
-  /**
-   * Obtains an instance of ThreadPatternConverter.
-   * @param options options, currently ignored, may be null.
-   * @return instance of ThreadPatternConverter.
-   */
-  public static ThreadPatternConverter newInstance(
-    final String[] options) {
-    return INSTANCE;
-  }
+public final class ThreadNameLayout<T extends Appendable>
+        extends StringLayout<T> {
 
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
-    toAppendTo.append(event.getThreadName());
-  }
+    /**
+     * Create new instance.
+     */
+    public ThreadNameLayout() {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        return record.getThreadName();
+    }
 }

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ThrownLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/ThrowableInformationPatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/ThrownLayout.java?view=diff&rev=533406&p1=logging/san \
dbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/ThrowableInfor \
mationPatternConverter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ThrownLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/ThrowableInformationPatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ThrownLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,87 +14,47 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.spi.ThrowableInformation;
+import org.apache.logging.core.Layout;
+import org.apache.logging.core.LogRecord;
 
+import java.io.IOException;
+import java.util.Locale;
 
 /**
- * Outputs the ThrowableInformation portion of the LoggingiEvent as a full \
                stacktrace
- * unless this converter's option is 'short', where it just outputs the first line \
of the trace. + * Formats any throwable object provide to the logging request.
  *
- * @author Paul Smith
- * @since 1.3
+ * @Immutable
  *
  */
-public class ThrowableInformationPatternConverter
-  extends LoggingEventPatternConverter {
-  /**
-   * If "short", only first line of throwable report will be formatted.
-   */
-  private final String option;
-
-  /**
-   * Private constructor.
-   * @param options options, may be null.
-   */
-  private ThrowableInformationPatternConverter(
-    final String[] options) {
-    super("Throwable", "throwable");
-
-    if ((options != null) && (options.length > 0)) {
-      option = options[0];
-    } else {
-      option = null;
+public final class ThrownLayout<T extends Appendable>
+        implements Layout<T> {
+    protected ThrownLayout() {
+
+    }
+
+    /** {@inheritDoc} */
+    public Object extract(LogRecord record) {
+        return record.getThrown();
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @TODO
+     */
+    public void render(Object extract, Locale locale, T destination)
+        throws IOException {
+        destination.append(String.valueOf(extract));
     }
-  }
 
-  /**
-   * Gets an instance of the class.
-    * @param options pattern options, may be null.  If first element is "short",
-   * only the first line of the throwable will be formatted.
-   * @return instance of class.
-   */
-  public static ThrowableInformationPatternConverter newInstance(
-    final String[] options) {
-    return new ThrowableInformationPatternConverter(options);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
-    ThrowableInformation information = event.getThrowableInformation();
-
-    if (information != null) {
-      String[] stringRep = information.getThrowableStrRep();
-
-      int length = 0;
-
-      if (option == null) {
-        length = stringRep.length;
-      } else if (option.equals("full")) {
-        length = stringRep.length;
-      } else if (option.equals("short")) {
-        length = 1;
-      } else {
-        length = stringRep.length;
-      }
-
-      for (int i = 0; i < length; i++) {
-        String string = stringRep[i];
-        toAppendTo.append(string).append("\n");
-      }
+    /**
+     * {@inheritDoc}
+     */
+    public void format(LogRecord record, Locale locale, T destination)
+        throws IOException {
+        render(extract(record), locale, destination);
     }
-  }
 
-  /**
-   * This converter obviously handles throwables.
-   * @return true.
-   */
-  public boolean handlesThrowable() {
-    return true;
-  }
 }

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ValueContextLayout.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/NDCPatternConverter.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/ValueContextLayout.java?view=diff&rev=533406&p1=loggi \
ng/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/NDCPatte \
rnConverter.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ValueContextLayout.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/NDCPatternConverter.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ValueContextLayout.java \
Sat Apr 28 11:43:37 2007 @@ -14,46 +14,33 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.logging.pattern;
 
-package org.apache.log4j.pattern;
-
-import org.apache.log4j.spi.LoggingEvent;
-
+import org.apache.logging.core.LogRecord;
+import org.apache.logging.core.ValueContext;
 
 /**
- * Return the event's NDC in a StringBuffer.
+ * This layout appends the value of the context of the log request.
  *
- * @author Ceki G&uuml;lc&uuml;
- * @since 1.3
+ * @PatternSpecifier("N", "ndc");
  */
-public final class NDCPatternConverter extends LoggingEventPatternConverter {
-  /**
-   *   Singleton.
-   */
-  private static final NDCPatternConverter INSTANCE =
-    new NDCPatternConverter();
-
-  /**
-   * Private constructor.
-   */
-  private NDCPatternConverter() {
-    super("NDC", "ndc");
-  }
-
-  /**
-   * Obtains an instance of NDCPatternConverter.
-   * @param options options, may be null.
-   * @return instance of NDCPatternConverter.
-   */
-  public static NDCPatternConverter newInstance(
-    final String[] options) {
-    return INSTANCE;
-  }
+public final class ValueContextLayout<T extends Appendable>
+        extends StringLayout<T> {
 
-  /**
-   * {@inheritDoc}
-   */
-  public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
-    toAppendTo.append(event.getNDC());
-  }
+    /**
+     * Create new instance.
+     */
+    public ValueContextLayout() {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object extract(final LogRecord record) {
+        Object context = record.getContext();
+        if (context instanceof ValueContext) {
+            return ((ValueContext) context).getValue();
+        }
+        return null;
+    }
 }

Propchange: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ValueContextLayout.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/ValueContextLayout.java
                
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/impl/CachedDateFormat.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/CachedDateFormat.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/impl/CachedDateFormat.java?view=diff&rev=533406&p1=lo \
gging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/Cache \
dDateFormat.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/impl/CachedDateFormat.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/CachedDateFormat.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/impl/CachedDateFormat.java \
Sat Apr 28 11:43:37 2007 @@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.log4j.pattern;
+package org.apache.logging.pattern.impl;
 
 import java.text.DateFormat;
 import java.text.FieldPosition;

Copied: logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/impl/PatternParser.java \
(from r533235, logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/PatternParser.java)
                
URL: http://svn.apache.org/viewvc/logging/sandbox/experimental/pattern-layout/src/main \
/java/org/apache/logging/pattern/impl/PatternParser.java?view=diff&rev=533406&p1=loggi \
ng/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/PatternP \
arser.java&r1=533235&p2=logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/impl/PatternParser.java&r2=533406
 ==============================================================================
--- logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/log4j/pattern/PatternParser.java \
                (original)
+++ logging/sandbox/experimental/pattern-layout/src/main/java/org/apache/logging/pattern/impl/PatternParser.java \
Sat Apr 28 11:43:37 2007 @@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.log4j.pattern;
+package org.apache.logging.pattern.impl;
 
 import org.apache.log4j.helpers.Loader;
 import org.apache.log4j.helpers.LogLog;
@@ -27,6 +27,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.apache.log4j.pattern.*;
 
 // Contributors:   Nelson Minar <(nelson@monkey.org>
 //                 Igor E. Poteryaev <jah@mail.ru>



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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic