libmoost
/home/mhx/git/github/libmoost/include/moost/logging/detail/custompatternlayout.hpp
Go to the documentation of this file.
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