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