001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements. See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache license, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License. You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the license for the specific language governing permissions and
015     * limitations under the license.
016     */
017    package org.apache.logging.log4j.core.pattern;
018    
019    import org.apache.logging.log4j.core.LogEvent;
020    
021    
022    /**
023     *
024     */
025    public class PatternFormatter {
026        private final LogEventPatternConverter converter;
027        private final FormattingInfo field;
028    
029        public PatternFormatter(final LogEventPatternConverter converter, final FormattingInfo field) {
030            this.converter = converter;
031            this.field = field;
032        }
033    
034        public void format(final LogEvent event, final StringBuilder buf) {
035            final int startField = buf.length();
036            converter.format(event, buf);
037            field.format(startField, buf);
038        }
039    
040        public LogEventPatternConverter getConverter() {
041            return converter;
042        }
043    
044        public FormattingInfo getFormattingInfo() {
045            return field;
046        }
047    
048        /**
049         * Normally pattern formatters are not meant to handle Exceptions although few pattern formatters might.
050         * <p>
051         * By examining the return values for this method, the containing layout will determine whether it handles
052         * throwables or not.
053         * </p>
054         *
055         * @return true if this PatternConverter handles throwables
056         */
057        public boolean handlesThrowable() {
058            return converter.handlesThrowable();
059        }
060    
061        /**
062         * Returns a String suitable for debugging.
063         *
064         * @return a String suitable for debugging.
065         */
066        @Override
067        public String toString() {
068            final StringBuilder sb = new StringBuilder();
069            sb.append(super.toString());
070            sb.append("[converter=");
071            sb.append(converter);
072            sb.append(", field=");
073            sb.append(field);
074            sb.append(']');
075            return sb.toString();
076        }
077    }