JAL-3026 srcjar files for VARNA and log4j
[jalview.git] / srcjar / org / apache / log4j / pattern / PropertiesPatternConverter.java
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.pattern;
19
20 import org.apache.log4j.spi.LoggingEvent;
21
22 import java.util.Iterator;
23 import java.util.Set;
24 import org.apache.log4j.helpers.*;
25
26
27 /**
28  * Able to handle the contents of the LoggingEvent's Property bundle and either
29  * output the entire contents of the properties in a similar format to the
30  * java.util.Hashtable.toString(), or to output the value of a specific key
31  * within the property bundle
32  * when this pattern converter has the option set.
33  *
34  * @author Paul Smith
35  * @author Ceki Gülcü
36  */
37 public final class PropertiesPatternConverter
38   extends LoggingEventPatternConverter {
39   /**
40    * Name of property to output.
41    */
42   private final String option;
43
44   /**
45    * Private constructor.
46    * @param options options, may be null.
47    */
48   private PropertiesPatternConverter(
49     final String[] options) {
50     super(
51       ((options != null) && (options.length > 0))
52       ? ("Property{" + options[0] + "}") : "Properties", "property");
53
54     if ((options != null) && (options.length > 0)) {
55       option = options[0];
56     } else {
57       option = null;
58     }
59   }
60
61   /**
62    * Obtains an instance of PropertiesPatternConverter.
63    * @param options options, may be null or first element contains name of property to format.
64    * @return instance of PropertiesPatternConverter.
65    */
66   public static PropertiesPatternConverter newInstance(
67     final String[] options) {
68     return new PropertiesPatternConverter(options);
69   }
70
71   /**
72    * {@inheritDoc}
73    */
74   public void format(final LoggingEvent event, final StringBuffer toAppendTo) {
75     // if there is no additional options, we output every single
76     // Key/Value pair for the MDC in a similar format to Hashtable.toString()
77     if (option == null) {
78       toAppendTo.append("{");
79
80       try {
81         Set keySet = MDCKeySetExtractor.INSTANCE.getPropertyKeySet(event);
82           if (keySet != null) {
83             for (Iterator i = keySet.iterator(); i.hasNext();) {
84                 Object item = i.next();
85                 Object val = event.getMDC(item.toString());
86                 toAppendTo.append("{").append(item).append(",").append(val).append(
87                 "}");
88             }
89           }
90       } catch(Exception ex) {
91               LogLog.error("Unexpected exception while extracting MDC keys", ex);
92       }
93
94       toAppendTo.append("}");
95     } else {
96       // otherwise they just want a single key output
97       Object val = event.getMDC(option);
98
99       if (val != null) {
100         toAppendTo.append(val);
101       }
102     }
103   }
104 }