libmoost
|
00001 /* vim:set ts=3 sw=3 sts=3 et: */ 00028 #ifndef MOOST_LOGGING_DETAIL_CUSTOM_PATTERN_LAYOUT_HPP__ 00029 #define MOOST_LOGGING_DETAIL_CUSTOM_PATTERN_LAYOUT_HPP__ 00030 00031 #include <log4cxx/patternlayout.h> 00032 00033 #include <log4cxx/pattern/loggerpatternconverter.h> 00034 #include <log4cxx/pattern/literalpatternconverter.h> 00035 #include <log4cxx/pattern/classnamepatternconverter.h> 00036 #include <log4cxx/pattern/datepatternconverter.h> 00037 #include <log4cxx/pattern/filedatepatternconverter.h> 00038 #include <log4cxx/pattern/filelocationpatternconverter.h> 00039 #include <log4cxx/pattern/fulllocationpatternconverter.h> 00040 #include <log4cxx/pattern/integerpatternconverter.h> 00041 #include <log4cxx/pattern/linelocationpatternconverter.h> 00042 #include <log4cxx/pattern/messagepatternconverter.h> 00043 #include <log4cxx/pattern/lineseparatorpatternconverter.h> 00044 #include <log4cxx/pattern/methodlocationpatternconverter.h> 00045 #include <log4cxx/pattern/levelpatternconverter.h> 00046 #include <log4cxx/pattern/relativetimepatternconverter.h> 00047 #include <log4cxx/pattern/threadpatternconverter.h> 00048 #include <log4cxx/pattern/ndcpatternconverter.h> 00049 #include <log4cxx/pattern/propertiespatternconverter.h> 00050 #include <log4cxx/pattern/throwableinformationpatternconverter.h> 00051 00052 #include "highlightlevelpatternconverter.hpp" 00053 00054 #if defined(_MSC_VER) 00055 #pragma warning (push) 00056 #pragma warning ( disable: 4231 4251 4275 4786 ) 00057 #endif 00058 00059 namespace log4cxx 00060 { 00061 00062 // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 00063 00064 class LOG4CXX_EXPORT CustomPatternLayout : public PatternLayout 00065 { 00066 public: 00067 00071 CustomPatternLayout() {} 00072 00076 CustomPatternLayout(const LogString& pattern) 00077 : PatternLayout() // makes sure it's not calling the other constructor 00078 { 00079 setConversionPattern(pattern); 00080 } 00081 00082 #define RULES_PUT(spec, cls) \ 00083 specs.insert(PatternMap::value_type(LogString(LOG4CXX_STR(spec)), (PatternConstructor) cls ::newInstance)) 00084 00085 protected: 00086 virtual log4cxx::pattern::PatternMap getFormatSpecifiers() 00087 { 00088 using namespace log4cxx::pattern; 00089 PatternMap specs; 00090 RULES_PUT("c", LoggerPatternConverter); 00091 RULES_PUT("logger", LoggerPatternConverter); 00092 00093 RULES_PUT("C", ClassNamePatternConverter); 00094 RULES_PUT("class", ClassNamePatternConverter); 00095 00096 RULES_PUT("d", DatePatternConverter); 00097 RULES_PUT("date", DatePatternConverter); 00098 00099 RULES_PUT("F", FileLocationPatternConverter); 00100 RULES_PUT("file", FileLocationPatternConverter); 00101 00102 RULES_PUT("l", FullLocationPatternConverter); 00103 00104 RULES_PUT("L", LineLocationPatternConverter); 00105 RULES_PUT("line", LineLocationPatternConverter); 00106 00107 RULES_PUT("m", MessagePatternConverter); 00108 RULES_PUT("message", MessagePatternConverter); 00109 00110 RULES_PUT("n", LineSeparatorPatternConverter); 00111 00112 RULES_PUT("M", MethodLocationPatternConverter); 00113 RULES_PUT("method", MethodLocationPatternConverter); 00114 00115 RULES_PUT("p", HighlightLevelPatternConverter); 00116 RULES_PUT("level", HighlightLevelPatternConverter); 00117 00118 RULES_PUT("r", RelativeTimePatternConverter); 00119 RULES_PUT("relative", RelativeTimePatternConverter); 00120 00121 RULES_PUT("t", ThreadPatternConverter); 00122 RULES_PUT("thread", ThreadPatternConverter); 00123 00124 RULES_PUT("x", NDCPatternConverter); 00125 RULES_PUT("ndc", NDCPatternConverter); 00126 00127 RULES_PUT("X", PropertiesPatternConverter); 00128 RULES_PUT("properties", PropertiesPatternConverter); 00129 00130 RULES_PUT("throwable", ThrowableInformationPatternConverter); 00131 return specs; 00132 } 00133 00134 }; 00135 00136 // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 00137 00138 } 00139 00140 00141 #if defined(_MSC_VER) 00142 #pragma warning ( pop ) 00143 #endif 00144 00145 #endif // MOOST_LOGGING_CUSTOM_PATTERN_LAYOUT_HPP