diff --git a/Utilities/mbilog/mbilogTextBackendBase.cpp b/Utilities/mbilog/mbilogTextBackendBase.cpp index 7a095ec690..5f7c74b68b 100644 --- a/Utilities/mbilog/mbilogTextBackendBase.cpp +++ b/Utilities/mbilog/mbilogTextBackendBase.cpp @@ -1,572 +1,573 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mbilogTextBackendBase.h" #include "mbilogLoggingTypes.h" #include #include #include #include #ifdef _WIN32 #define USE_WIN32COLOREDCONSOLE #include + #include "mbilogTextDictionary.h" #endif static bool g_init=false; mbilog::TextBackendBase::~TextBackendBase() {} #ifdef USE_WIN32COLOREDCONSOLE static HANDLE g_hConsole; class AutoCategorize { protected: std::vector path; std::string current,category; int pos; void flush() { if(current.size()>0) { if(current.compare("..")==0) { if(path.size()>0) path.pop_back(); } else { path.push_back(current); } current=""; } } std::string simplify(std::string x) { bool redo; std::string lft(""),rgt(""); do { redo=false; for(int r=0; r < sizeof(mbilog::replace)/sizeof(char*); r+=2) { int s = static_cast( strlen(mbilog::replace[r]) ); int xs = static_cast( x.size() ); if(xs==s) { if( mbilog::replace[r+1][0] || !lft.empty() || !rgt.empty() ) if(x.compare(mbilog::replace[r])==0) x=mbilog::replace[r+1]; } else if(xs>s) { if(strncmp(mbilog::replace[r],&x.c_str()[xs-s],s)==0) { std::string rp = mbilog::replace[r+1]; if(!rp.empty()) rp[0]=toupper(rp[0]); x = x.substr(0,xs-s); rgt = rp + rgt; redo=true; } else if(strncmp(mbilog::replace[r],x.c_str(),s)==0) { std::string rp = mbilog::replace[r+1]; if(!rp.empty()) rp[0]=toupper(rp[0]); x=x.substr(s,xs-s); lft = lft + rp; redo=true; } } } } while(redo); x[0]=toupper(x[0]); x=lft+x+rgt; x[0]=tolower(x[0]); return x; } std::string concat(std::string a,std::string b,bool opt) { int as = static_cast( a.size() ); int bs = static_cast( b.size() ); if(opt && as <= bs) { if (as==bs && a.compare(b)==0) return a; if(strncmp(a.c_str(),b.c_str(),as)==0) { b=b.substr(as,bs-as); b[0]=tolower(b[0]); } } return a+"."+b; } bool search2p2(char *a,char *b,bool optimize=true) { int size = static_cast( path.size() ) - 3; for(int r=0;r( path.size() ) - 2; for(int r=0;r( path.size() ) - 2; for(int r=0;r( strlen(l.filePath) ); current = ""; for(int r = 0;r>> " << std::flush; ChangeColor( colorNormal ); std::cout << std::endl; */ // Give out start time ChangeColor( colorTime ); AppendTimeStamp(std::cout); std::cout << std::endl; } switch(l.level) { case mbilog::Info: break; case mbilog::Warn: colorTime = FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY; //colorText = FOREGROUND_RED|FOREGROUND_GREEN; colorCat = FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY; showColon = false; forceCat = true; break; case mbilog::Error: colorTime = FOREGROUND_RED|FOREGROUND_INTENSITY; //colorText = FOREGROUND_RED; colorCat = FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY; showColon = false; forceCat = true; break; case mbilog::Fatal: colorTime = FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY; //colorText = FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY; colorCat = FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY; showColon = false; forceCat = true; break; case mbilog::Debug: colorTime = FOREGROUND_BLUE|FOREGROUND_INTENSITY; //colorText |= FOREGROUND_INTENSITY; showColon = false; break; } ChangeColor( colorTime ); std::locale C("C"); std::locale originalLocale = std::cout.getloc(); std::cout.imbue(C); std::cout << std::fixed << std::setprecision(2) << ((double)std::clock())/CLOCKS_PER_SEC << " "; std::cout.imbue( originalLocale ); // category { AutoCategorize ac(l); std::string pre=ac.GetPrefix(); std::string cat=ac.GetCategory(); cat = pre + cat; if(cat.empty()) cat = l.category; if(!cat.empty()) { ChangeColor( colorCat ); // static std::string lastCat; // if(forceCat||lastCat.compare(cat)) { std::cout << cat << std::flush; // lastCat = cat; } // else // std::cout << "..." << std::flush; if(showColon) { ChangeColor( FOREGROUND_BLUE | FOREGROUND_INTENSITY ); std::cout << ": " << std::flush; } else std::cout << " "; } } switch(l.level) { case mbilog::Info: break; case mbilog::Warn: ChangeColor( colorTime ); std::cout << "WARNING" << std::flush; ChangeColor( FOREGROUND_BLUE | FOREGROUND_INTENSITY ); std::cout << ": " << std::flush; break; case mbilog::Error: ChangeColor( colorTime ); std::cout << "ERROR" << std::flush; ChangeColor( FOREGROUND_BLUE | FOREGROUND_INTENSITY ); std::cout << ": " << std::flush; break; case mbilog::Fatal: ChangeColor( colorTime ); std::cout << "FATAL" << std::flush; ChangeColor( FOREGROUND_BLUE | FOREGROUND_INTENSITY ); std::cout << ": " << std::flush; break; case mbilog::Debug: ChangeColor( colorTime ); std::cout << "DBG" << std::flush; ChangeColor( FOREGROUND_BLUE | FOREGROUND_INTENSITY ); std::cout << ": " << std::flush; break; } ChangeColor( colorText ); std::cout << l.message << std::endl; ChangeColor( colorNormal ); } #endif