libmoost
|
00001 /* vim:set ts=3 sw=3 sts=3 et: */ 00028 #ifndef MOOST_LOGGING_DETAIL_HIGHLIGHT_LEVEL_PATTERN_CONVERTER_HPP__ 00029 #define MOOST_LOGGING_DETAIL_HIGHLIGHT_LEVEL_PATTERN_CONVERTER_HPP__ 00030 00031 #include <log4cxx/pattern/loggingeventpatternconverter.h> 00032 #include <log4cxx/helpers/transcoder.h> 00033 #include <log4cxx/spi/loggingevent.h> 00034 #include "../../terminal_format.hpp" 00035 00036 #if defined(_MSC_VER) 00037 #pragma warning (push) 00038 #pragma warning ( disable: 4231 4251 4275 4786 ) 00039 #endif 00040 00041 namespace log4cxx { namespace pattern { 00042 00043 class HighlightLevelPatternConverter : public LoggingEventPatternConverter 00044 { 00045 00046 HighlightLevelPatternConverter() 00047 : LoggingEventPatternConverter( LOG4CXX_STR("Level"), 00048 LOG4CXX_STR("level")) {} 00049 00050 00051 public: 00052 00058 static PatternConverterPtr newInstance(const std::vector<LogString>& /*options*/) 00059 { 00060 static PatternConverterPtr def(new HighlightLevelPatternConverter()); 00061 return def; 00062 } 00063 00064 void format( const log4cxx::spi::LoggingEventPtr& event, 00065 LogString& toAppendTo, 00066 log4cxx::helpers::Pool& /*p*/) const 00067 { 00068 LevelPtr level = event->getLevel(); 00069 switch ( level->toInt() ) 00070 { 00071 case Level::FATAL_INT: 00072 case Level::ERROR_INT: 00073 { 00074 std::string lvl; 00075 level->toString(lvl); 00076 lvl = moost::terminal_format::getError(lvl); 00077 LogString wlvl; 00078 helpers::Transcoder::decode(lvl, wlvl); 00079 toAppendTo.append(wlvl); 00080 } 00081 break; 00082 00083 case Level::WARN_INT: 00084 { 00085 std::string lvl; 00086 level->toString(lvl); 00087 lvl = moost::terminal_format::getWarning(lvl); 00088 LogString wlvl; 00089 helpers::Transcoder::decode(lvl, wlvl); 00090 toAppendTo.append(wlvl); 00091 } 00092 00093 break; 00094 00095 default: 00096 toAppendTo.append(event->getLevel()->toString()); 00097 break; 00098 } 00099 } 00100 00101 LogString getStyleClass(const log4cxx::helpers::ObjectPtr& obj) const 00102 { 00103 log4cxx::spi::LoggingEventPtr e(obj); 00104 if (e != NULL) { 00105 int lint = e->getLevel()->toInt(); 00106 00107 switch (lint) { 00108 case Level::TRACE_INT: 00109 return LOG4CXX_STR("level trace"); 00110 00111 case Level::DEBUG_INT: 00112 return LOG4CXX_STR("level debug"); 00113 00114 case Level::INFO_INT: 00115 return LOG4CXX_STR("level info"); 00116 00117 case Level::WARN_INT: 00118 return LOG4CXX_STR("level warn"); 00119 00120 case Level::ERROR_INT: 00121 return LOG4CXX_STR("level error"); 00122 00123 case Level::FATAL_INT: 00124 return LOG4CXX_STR("level fatal"); 00125 00126 default: 00127 return LogString(LOG4CXX_STR("level ")) + e->getLevel()->toString(); 00128 } 00129 } 00130 00131 return LOG4CXX_STR("level"); 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