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 | #ifndef _LOG4CXX_HELPER_OPTION_CONVERTER_H
|
---|
19 | #define _LOG4CXX_HELPER_OPTION_CONVERTER_H
|
---|
20 |
|
---|
21 | #include <log4cxx/logstring.h>
|
---|
22 | #include <log4cxx/helpers/objectptr.h>
|
---|
23 |
|
---|
24 | namespace log4cxx
|
---|
25 | {
|
---|
26 | class Level;
|
---|
27 | class File;
|
---|
28 | typedef helpers::ObjectPtrT<Level> LevelPtr;
|
---|
29 |
|
---|
30 | namespace spi
|
---|
31 | {
|
---|
32 | class LoggerRepository;
|
---|
33 | typedef helpers::ObjectPtrT<LoggerRepository> LoggerRepositoryPtr;
|
---|
34 | }
|
---|
35 |
|
---|
36 | namespace helpers
|
---|
37 | {
|
---|
38 | class Properties;
|
---|
39 |
|
---|
40 | class Object;
|
---|
41 | typedef ObjectPtrT<Object> ObjectPtr;
|
---|
42 |
|
---|
43 | class Class;
|
---|
44 |
|
---|
45 | /** A convenience class to convert property values to specific types.*/
|
---|
46 | class LOG4CXX_EXPORT OptionConverter
|
---|
47 | {
|
---|
48 | /** OptionConverter is a static class. */
|
---|
49 | private:
|
---|
50 | OptionConverter() {}
|
---|
51 |
|
---|
52 | public:
|
---|
53 | static LogString convertSpecialChars(const LogString& s);
|
---|
54 |
|
---|
55 | /**
|
---|
56 | If <code>value</code> is "true", then <code>true</code> is
|
---|
57 | returned. If <code>value</code> is "false", then
|
---|
58 | <code>true</code> is returned. Otherwise, <code>default</code> is
|
---|
59 | returned.
|
---|
60 |
|
---|
61 | <p>Case of value is unimportant.
|
---|
62 | */
|
---|
63 | static bool toBoolean(const LogString& value, bool dEfault);
|
---|
64 | static int toInt(const LogString& value, int dEfault);
|
---|
65 | static long toFileSize(const LogString& value, long dEfault);
|
---|
66 | static LevelPtr toLevel(const LogString& value,
|
---|
67 | const LevelPtr& defaultValue);
|
---|
68 |
|
---|
69 | /**
|
---|
70 | Find the value corresponding to <code>key</code> in
|
---|
71 | <code>props</code>. Then perform variable substitution on the
|
---|
72 | found value.
|
---|
73 | */
|
---|
74 | static LogString findAndSubst(const LogString& key, Properties& props);
|
---|
75 |
|
---|
76 | /**
|
---|
77 | Perform variable substitution in string <code>val</code> from the
|
---|
78 | values of keys found in the system propeties.
|
---|
79 |
|
---|
80 | <p>The variable substitution delimeters are <b>${</b> and <b>}</b>.
|
---|
81 |
|
---|
82 | <p>For example, if the System properties contains "key=value", then
|
---|
83 | the call
|
---|
84 | <pre>
|
---|
85 | String s = OptionConverter.substituteVars("Value of key is ${key}.");
|
---|
86 | </pre>
|
---|
87 |
|
---|
88 | will set the variable <code>s</code> to "Value of key is value.".
|
---|
89 |
|
---|
90 | <p>If no value could be found for the specified key, then the
|
---|
91 | <code>props</code> parameter is searched, if the value could not
|
---|
92 | be found there, then substitution defaults to the empty string.
|
---|
93 |
|
---|
94 | <p>For example, if system propeties contains no value for the key
|
---|
95 | "inexistentKey", then the call
|
---|
96 |
|
---|
97 | <pre>
|
---|
98 | String s = OptionConverter.subsVars("Value of inexistentKey is [${inexistentKey}]");
|
---|
99 | </pre>
|
---|
100 | will set <code>s</code> to "Value of inexistentKey is []"
|
---|
101 |
|
---|
102 | <p>An IllegalArgumentException is thrown if
|
---|
103 | <code>val</code> contains a start delimeter "${" which is not
|
---|
104 | balanced by a stop delimeter "}". </p>
|
---|
105 |
|
---|
106 | @param val The string on which variable substitution is performed.
|
---|
107 | @param props The properties from which variable substitution is performed.
|
---|
108 | @throws IllegalArgumentException if <code>val</code> is malformed.
|
---|
109 | */
|
---|
110 | static LogString substVars(const LogString& val, Properties& props);
|
---|
111 |
|
---|
112 | /**
|
---|
113 | * Gets the specified system property.
|
---|
114 | @param key The key to search for.
|
---|
115 | @param def The default value to return.
|
---|
116 | @return the string value of the system property, or the default
|
---|
117 | value if there is no property with that key.
|
---|
118 | */
|
---|
119 | static LogString getSystemProperty(const LogString& key, const LogString& def);
|
---|
120 |
|
---|
121 | /**
|
---|
122 | Instantiate an object given a class name. Check that the
|
---|
123 | <code>className</code> is a subclass of
|
---|
124 | <code>superClass</code>. If that test fails or the object could
|
---|
125 | not be instantiated, then <code>defaultValue</code> is returned.
|
---|
126 |
|
---|
127 | @param className The fully qualified class name of the object to instantiate.
|
---|
128 | @param superClass The class to which the new object should belong.
|
---|
129 | @param defaultValue The object to return in case of non-fulfillment
|
---|
130 | */
|
---|
131 | static ObjectPtr instantiateByClassName(const LogString& className,
|
---|
132 | const Class& superClass, const ObjectPtr& defaultValue);
|
---|
133 |
|
---|
134 | static ObjectPtr instantiateByKey(Properties& props,
|
---|
135 | const LogString& key, const Class& superClass,
|
---|
136 | const ObjectPtr& defaultValue);
|
---|
137 |
|
---|
138 | /**
|
---|
139 | Configure log4cxx given a configFileName.
|
---|
140 |
|
---|
141 | <p>The configFileName must point to a file which will be
|
---|
142 | interpreted by a new instance of a log4cxx configurator.
|
---|
143 |
|
---|
144 | <p>All configurations steps are taken on the
|
---|
145 | <code>hierarchy</code> passed as a parameter.
|
---|
146 |
|
---|
147 | <p>
|
---|
148 | @param configFileName The location of the configuration file.
|
---|
149 | @param clazz The classname, of the log4cxx configurator which
|
---|
150 | will parse the file <code>configFileName</code>. This must be
|
---|
151 | a subclass of Configurator, or null. If this value is null then
|
---|
152 | a default configurator of PropertyConfigurator is used, unless the
|
---|
153 | filename pointed to by <code>configFileName</code> ends in '.xml',
|
---|
154 | in which case DOMConfigurator is used.
|
---|
155 | @param hierarchy The Hierarchy to act on.
|
---|
156 | */
|
---|
157 | static void selectAndConfigure(const File& configFileName,
|
---|
158 | const LogString& clazz, spi::LoggerRepositoryPtr& hierarchy);
|
---|
159 | };
|
---|
160 | } // namespace helpers
|
---|
161 | } // namespace log4cxx
|
---|
162 |
|
---|
163 | #endif //_LOG4CXX_HELPER_OPTION_CONVERTER_H
|
---|
164 |
|
---|