    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17
    18  package org.apache.log4j;
    19  import org.apache.log4j.helpers.PatternParser;
    20
    21  /**
    22
    23    Example showing how to extend PatternLayout to recognize additional
    24    conversion characters.
    25
    26    <p>In this case MyPatternLayout recognizes %# conversion pattern. It
    27    outputs the value of an internal counter which is also incremented
    28    at each call.
    29
    30    <p>See <a href=doc-files/MyPatternLayout.java><b>source</b></a> code
    31    for more details.
    32
    33    @see MyPatternParser
    34    @see org.apache.log4j.PatternLayout
    35    @author Anders Kristensen
    36  */
    37  public class MyPatternLayout extends PatternLayout {
    38    public
    39    MyPatternLayout() {
    40      this(DEFAULT_CONVERSION_PATTERN);
    41    }
    42
    43    public
    44    MyPatternLayout(String pattern) {
    45      super(pattern);
    46    }
    47
    48    public
    49    PatternParser createPatternParser(String pattern) {
    50      return new MyPatternParser(
    51        pattern == null ? DEFAULT_CONVERSION_PATTERN : pattern);
    52    }
    53
    54    public
    55    static void main(String[] args) {
    56      Layout layout = new MyPatternLayout("[counter=%.10#] - %m%n");
    57      Logger logger = Logger.getLogger("some.cat");
    58      logger.addAppender(new ConsoleAppender(layout, ConsoleAppender.SYSTEM_OUT));
    59      logger.debug("Hello, log");
    60      logger.info("Hello again...");
    61    }
    62  }