00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #include <stdlib.h>
00014
00015 #ifdef __ROOT__
00016 #include "TROOT.h"
00017 #include "TSystem.h"
00018 #include "TString.h"
00019 #include "TError.h"
00020 #include "TEnv.h"
00021 #include "TVirtualMutex.h"
00022 #endif
00023
00024 #ifndef _NO_IMPLEMENTATION_
00025 #define _NO_IMPLEMENTATION_ { \
00026 const char *text = __FUNCTION__; \
00027 NDC::push(_T("NO IMPLEMENTATION")); \
00028 PrintLogger(text,'D',""); \
00029 NDC::pop(); \
00030 }
00031 #endif
00032
00033 #include "StLoggerManager.h"
00034
00035 #include <log4cxx/basicconfigurator.h>
00036 #include <log4cxx/propertyconfigurator.h>
00037 #include <log4cxx/helpers/exception.h>
00038 #include <log4cxx/ndc.h>
00039 #include <log4cxx/consoleappender.h>
00040 #include <log4cxx/patternlayout.h>
00041 #include <log4cxx/layout.h>
00042 #include <log4cxx/xml/domconfigurator.h>
00043
00044
00045
00046 #include "StStarLogger/StUCMAppender.h"
00047
00048 using namespace log4cxx;
00049 using namespace log4cxx::helpers;
00050 using namespace log4cxx::spi;
00051 using namespace log4cxx::varia;
00052 using namespace log4cxx::db;
00053 #if (STAR_LOG4CXX_VERSION == 10)
00054 using namespace log4cxx::filter;
00055 #endif
00056
00057 class StMessage {
00058 public: StMessage(){}
00059 };
00060
00061 log4cxx::LoggerPtr StLoggerManager::fgQALogger;
00062 log4cxx::LoggerPtr &StLoggerManager::fgUCMLogger = *(new log4cxx::LoggerPtr());
00063
00064 const char *StLoggerManager::fgLevels = "FEWIDQU";
00065 #ifdef __ROOT__
00066
00067
00068 static void Log4cxx4RootErrorHandler(Int_t level, Bool_t abort, const char *location, const char *msg)
00069 {
00070
00071
00072
00073
00074
00075
00076 NDC::push("ROOT");
00077
00078 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,00,0)
00079 if (gErrorIgnoreLevel == kUnset) {
00080
00081 R__LOCKGUARD2(gErrorMutex);
00082 #else
00083 {
00084 #endif
00085
00086 gErrorIgnoreLevel = 0;
00087 if (gEnv) {
00088 TString level = gEnv->GetValue("Root.ErrorIgnoreLevel", "Info");
00089 if (!level.CompareTo("Info",TString::kIgnoreCase))
00090 gErrorIgnoreLevel = kInfo;
00091 else if (!level.CompareTo("Warning",TString::kIgnoreCase))
00092 gErrorIgnoreLevel = kWarning;
00093 else if (!level.CompareTo("Error",TString::kIgnoreCase))
00094 gErrorIgnoreLevel = kError;
00095 else if (!level.CompareTo("Break",TString::kIgnoreCase))
00096 gErrorIgnoreLevel = kBreak;
00097 else if (!level.CompareTo("SysError",TString::kIgnoreCase))
00098 gErrorIgnoreLevel = kSysError;
00099 else if (!level.CompareTo("Fatal",TString::kIgnoreCase))
00100 gErrorIgnoreLevel = kFatal;
00101 }
00102 }
00103
00104 if (level < gErrorIgnoreLevel)
00105 return;
00106
00107
00108 if (level >= kFatal) {
00109 LOG_FATAL << location <<msg << endm;
00110 } else if (level >= kSysError) {
00111 LOG_FATAL << location << " : " << msg << endm;
00112 } else if (level >= kBreak) {
00113 LOG_FATAL << location << " : " << msg << endm;
00114 } else if (level >= kError) {
00115 LOG_ERROR << location << " : " << msg << endm;
00116
00117
00118 } else if (level >= kInfo) {
00119 LOG_INFO << location << " : " << msg << endm;
00120 }
00121
00122 if (abort) {
00123 if (gSystem) {
00124 gSystem->StackTrace();
00125 gSystem->Abort();
00126 } else
00127 ::abort();
00128 }
00129 NDC::pop();
00130 }
00131 #endif
00132
00133 std::ostream& StLoggerManager::OperatorShift(std::ostream& os, StMessage* stm) {
00134
00135 ostrstream &thisStream = Stream();
00136 if ( (&thisStream == &os) && (stm == endm) ) {
00137
00138 os << ends;
00139 StMessMgr::CurrentMessager()->Print();
00140 os.seekp(0);os<< ends;os.seekp(0);
00141 } else {
00142 assert(0);
00143 }
00144 return os;
00145 }
00146
00147
00148
00149
00150
00151
00152
00153
00154 StMessMgr* StLoggerManager::mInstance = 0;
00155
00156
00157
00158 #ifdef __ROOT__
00159 ClassImp(StLoggerManager)
00160 #endif
00161
00162 StLoggerManager::StLoggerManager(const char *loggerName)
00163 : StMessMgr(), fCurType(0),fAllowRepeat(-1),fLastRepeatCounter(0),fStarOptionFilter(0)
00164 {
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189 unsigned int i;
00190 for (i=0;i<strlen(fgLevels);i++){
00191 fSourceFileNames.push_back("");
00192 fLineNumbers[i] = -1;
00193 }
00194 fLogger = Logger::getLogger(_T(loggerName));
00195 fDefaultLevel = fLogger->getLevel();
00196
00197 fCurOpt = new char[32]; fCurOpt [0] = 0;
00198 SwitchOff("D");
00199 MemoryOn();
00200 }
00201
00202
00203 StLoggerManager::~StLoggerManager() {
00204
00205
00206
00207
00208 fCurType = 0;
00209 if (fCurOpt) delete [] fCurOpt; fCurOpt = 0;
00210
00211 if (StLoggerManager::Instance() == this) {
00212
00213 gMessMgr = 0;
00214 }
00215
00216 }
00217
00218 StMessMgr* StLoggerManager::Instantiate()
00219 {return StLoggerManager::StarLoggerInit(); }
00220
00221
00222 StMessMgr* StLoggerManager::Instantiate(const char *loggerName)
00223 {return StLoggerManager::StarLoggerInit(loggerName); }
00224
00225
00226 StMessMgr* StLoggerManager::StarLoggerInit(const char *loggerName)
00227 {
00228 return new StLoggerManager(loggerName);
00229 }
00230
00231 StMessMgr* StLoggerManager::StarLoggerInit() {
00232
00233
00234
00235
00236 if (!mInstance) {
00237
00238 const char *proEnv = 0;
00239 #ifndef __ROOT__
00240 String propertyFile = "log4j.xml";
00241 #else
00242 TString fullPropertyFileName = gEnv->GetValue("Logger.Configuration","log4j.xml");
00243 gSystem->ExpandPathName(fullPropertyFileName);
00244 String propertyFile = (const char*)fullPropertyFileName;
00245 proEnv = gSystem->Getenv("STAR_LOGGER_PROPERTY");
00246 #endif
00247 StarOptionFilterPtr filter;
00248 if (proEnv && proEnv[0] ) propertyFile=proEnv;
00249 if (!gSystem->AccessPathName(propertyFile.c_str())) {
00250 xml::DOMConfigurator::configure(propertyFile);
00251
00252 } else {
00253
00254 LoggerPtr root = Logger::getRootLogger();
00255
00256 ConsoleAppenderPtr appender = new ConsoleAppender(
00257 new PatternLayout("%-3c{2}:%-5p - %m%n"));
00258
00259 appender->setName(_T("defaultAppender"));
00260 root->addAppender(appender);
00261
00262 root->setLevel(LOG4CXX_LEVEL_INFO);
00263 }
00264 LoggerPtr root = Logger::getRootLogger();
00265
00266 fgQALogger = Logger::getLogger("QA");
00267 fgUCMLogger = Logger::getLogger("UCM");
00268 #if 1
00269
00270 TString ucmenv = gSystem->Getenv("LOGGING");
00271 if (ucmenv == "UCM" && gSystem->Getenv("JOBINDEX") && gSystem->Getenv("REQUESTID") ) {
00272 StUCMAppenderPtr appender(new StUCMAppender(ucmenv.Data()));
00273 appender->setLayout(new PatternLayout("%m"));
00274 appender->setName(_T("UCM"));
00275 fgUCMLogger->addAppender(appender);
00276 StringMatchFilterPtr filter(new StringMatchFilter());
00277 filter->setStringToMatch(_T("StageID="));
00278 filter->setAcceptOnMatch(true);
00279 appender->addFilter(filter);
00280 appender->addFilter( DenyAllFilterPtr(new DenyAllFilter));
00281
00282
00283 fgUCMLogger->setLevel(LOG4CXX_LEVEL_DEBUG);
00284 }
00285 #endif
00286
00287 NDC::push(_T(":"));
00288
00289 mInstance = StarLoggerInit("BFC");
00290 ((StLoggerManager *)mInstance)->SetStarOptionFilter(filter);
00291
00292 gMessMgr = mInstance;
00293
00294
00295 SetErrorHandler(Log4cxx4RootErrorHandler);
00296
00297 }
00298 return mInstance;
00299 }
00300
00301 ostrstream &StLoggerManager::Stream()
00302 {
00303
00304
00305
00306 switch (fCurType) {
00307 case 'F': return fStreams[0];
00308 case 'E': return fStreams[1];
00309 case 'W': return fStreams[2];
00310 case 'I': return fStreams[3];
00311 case 'D': return fStreams[4];
00312 case 'Q': return fStreams[5];
00313 default: return fStreams[6];
00314 };
00315 }
00316
00317
00318 bool StLoggerManager::isDebugEnabled() const{ return fLogger->isDebugEnabled(); }
00319
00320 bool StLoggerManager::isWarnEnabled() const{ return fLogger->isWarnEnabled(); }
00321
00322 bool StLoggerManager::isErrorEnabled() const{ return fLogger->isErrorEnabled(); }
00323
00324 bool StLoggerManager::isInfoEnabled() const{ return fLogger->isInfoEnabled(); }
00325
00326 bool StLoggerManager::isFatalEnabled() const{ return fLogger->isFatalEnabled(); }
00327
00328 bool StLoggerManager::isEnabledFor() const{ return true; }
00329
00330 bool StLoggerManager::isQAInfoEnabled() const{ return fgQALogger? fgQALogger->isInfoEnabled():false; }
00331
00332 bool StLoggerManager::isUCMInfoEnabled() const{ return fgUCMLogger? fgUCMLogger->isInfoEnabled():false; }
00333
00334 ostrstream& StLoggerManager::Message(const char* mess, const char* type,
00335 const char* opt,const char *sourceFileName,int lineNumber) {
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358 unsigned char typeChar = 'I';
00359 if (type && type[0]) typeChar = type[0];
00360 if (!opt) opt = "";
00361
00362
00363 fCurType = typeChar;
00364 strcpy(fCurOpt,opt);
00365
00366
00367 if (sourceFileName && sourceFileName[0] ) fSourceFileNames[LevelIndex(fCurType)] = sourceFileName;
00368 else fSourceFileNames[LevelIndex(fCurType)].clear();
00369 fLineNumbers[LevelIndex(fCurType)] = lineNumber;
00370
00371
00372
00373 return Stream();
00374 }
00375
00376 void StLoggerManager::BuildMessage(const char* mess, unsigned char type,
00377 const char* opt,const char *sourceFileName, int lineNumber) {
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398 if (!opt) opt = "";
00399 PrintLogger(mess,type,opt,sourceFileName,lineNumber);
00400 }
00401
00402 void StLoggerManager::PrintLogger(const char* mess, unsigned char type,
00403 const char* opt,const char *sourceFileName, int lineNumber)
00404 {
00405 if (!opt) opt = "";
00406 unsigned char typeChar = 'I';
00407
00408 if (type) typeChar = type;
00409 if (!(sourceFileName || fSourceFileNames[LevelIndex(typeChar)].empty() ) )
00410 {
00411 sourceFileName = fSourceFileNames[LevelIndex(typeChar)].c_str();
00412 }
00413
00414 if ( lineNumber == -1)
00415 lineNumber = fLineNumbers[LevelIndex(typeChar)];
00416 bool canPrint = true;
00417 if (fAllowRepeat >= 0 ) {
00418
00419 if ( mess == fLastMessage ) {
00420 fLastRepeatCounter++;
00421 canPrint = (fAllowRepeat >= fLastRepeatCounter);
00422 } else {
00423 fLastRepeatCounter= 0;
00424 fLastMessage = mess;
00425 }
00426 }
00427 if (canPrint) {
00428 if ( (mess == 0) || (mess[0] == 0)) mess = ".";
00429
00430 switch (typeChar) {
00431 case 'F': fLogger->fatal (_T(mess),LocationInfo(sourceFileName,"",lineNumber)); break;
00432 case 'E': fLogger->error (_T(mess),LocationInfo(sourceFileName,"",lineNumber)); break;
00433 case 'W': fLogger->warn (_T(mess),LocationInfo(sourceFileName,"",lineNumber)); break;
00434 case 'I': fLogger->info (_T(mess),LocationInfo(sourceFileName,"",lineNumber)); break;
00435 case 'D': fLogger->debug (_T(mess),LocationInfo(sourceFileName,"",lineNumber)); break;
00436 case 'Q': fgQALogger->info(_T(mess),LocationInfo(sourceFileName,"",lineNumber)); break;
00437 case 'U': fgUCMLogger->info(_T(mess),LocationInfo(sourceFileName,"",lineNumber)); break;
00438 default: fLogger->info(_T(mess),LocationInfo(sourceFileName,"",lineNumber)); break;
00439 };
00440 }
00441
00442 if (lineNumber != -1) {
00443 NDC::pop();
00444 }
00445 }
00446
00447 void StLoggerManager::Print() {
00448
00449
00450
00451
00452 string message = Stream().str();
00453 BuildMessage(message.c_str(),fCurType,fCurOpt);
00454 }
00455
00456 int StLoggerManager::PrintList(messVec* list) {
00457
00458
00459
00460 _NO_IMPLEMENTATION_;
00461 return -1;
00462 }
00463
00464 StMessage* StLoggerManager::FindMessage(const char* s1, const char* s2,
00465 const char* s3, const char* s4, messVec* list) {
00466 _NO_IMPLEMENTATION_;
00467 return 0;
00468 }
00469
00470 messVec* StLoggerManager::FindMessageList(const char* s1, const char* s2,
00471 const char* s3, const char* s4, messVec* list) {
00472 _NO_IMPLEMENTATION_;
00473 return 0;
00474 }
00475
00476 int StLoggerManager::RemoveMessage(StMessage* mess) {
00477 _NO_IMPLEMENTATION_;
00478 return 0;
00479 }
00480
00481 void StLoggerManager::Summary(size_t nTerms) {
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492 _NO_IMPLEMENTATION_;
00493 }
00494
00495 void StLoggerManager::MemorySummary() {
00496
00497
00498
00499
00500 _NO_IMPLEMENTATION_;
00501 }
00502
00503 int StLoggerManager::AddType(const char* type, const char* text) {
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513 _NO_IMPLEMENTATION_;
00514 return 0;
00515 }
00516
00517 void StLoggerManager::PrintInfo() {
00518 fLogger->info("**************************************************************\n");
00519 fLogger->info("* $Id: StLoggerManager.cxx,v 1.39 2010/04/27 21:31:44 fine Exp $\n");
00520
00521 fLogger->info("**************************************************************\n");
00522 }
00523
00524
00525
00526
00527
00528
00529
00530 ostrstream& StLoggerManager::Info(const char* mess, const char* opt,const char *sourceFileName,int lineNumber)
00531 { return Message(mess, "I", opt,sourceFileName,lineNumber);}
00532
00533 int StLoggerManager::PrintInfos()
00534 {
00535 _NO_IMPLEMENTATION_;
00536 return 0;
00537
00538 }
00539
00540 const messVec* StLoggerManager::GetInfos()
00541 {
00542 _NO_IMPLEMENTATION_;
00543 return 0;
00544
00545 }
00546
00547 StMessage* StLoggerManager::FindInfo(const char* s1, const char* s2,
00548 const char* s3, const char* s4)
00549 {
00550 _NO_IMPLEMENTATION_;
00551 return 0;
00552
00553 }
00554
00555 messVec* StLoggerManager::FindInfoList(const char* s1, const char* s2,
00556 const char* s3, const char* s4)
00557 {
00558 _NO_IMPLEMENTATION_;
00559 return 0;
00560
00561 }
00562
00563
00564
00565
00566
00567 ostrstream& StLoggerManager::Warning(const char* mess, const char* opt,const char *sourceFileName,int lineNumber)
00568 { return Message(mess, "W", opt,sourceFileName,lineNumber);}
00569
00570 int StLoggerManager::PrintWarnings()
00571 {
00572 _NO_IMPLEMENTATION_;
00573 return 0;
00574
00575 }
00576
00577 const messVec* StLoggerManager::GetWarnings()
00578 {
00579 _NO_IMPLEMENTATION_;
00580 return 0;
00581
00582 }
00583
00584 StMessage* StLoggerManager::FindWarning(const char* s1, const char* s2,
00585 const char* s3, const char* s4)
00586 {
00587 _NO_IMPLEMENTATION_;
00588 return 0;
00589
00590 }
00591
00592 messVec* StLoggerManager::FindWarningList(const char* s1, const char* s2,
00593 const char* s3, const char* s4)
00594 {
00595 _NO_IMPLEMENTATION_;
00596 return 0;
00597
00598 }
00599
00600
00601
00602
00603
00604 ostrstream& StLoggerManager::Error(const char* mess, const char* opt,const char *sourceFileName,int lineNumber)
00605 { return Message(mess, "E", opt,sourceFileName,lineNumber);}
00606
00607 int StLoggerManager::PrintErrors()
00608 {
00609 _NO_IMPLEMENTATION_;
00610 return 0;
00611
00612 }
00613
00614 const messVec* StLoggerManager::GetErrors()
00615 {
00616 _NO_IMPLEMENTATION_;
00617 return 0;
00618
00619 }
00620
00621 StMessage* StLoggerManager::FindError(const char* s1, const char* s2,
00622 const char* s3, const char* s4)
00623 {
00624 _NO_IMPLEMENTATION_;
00625 return 0;
00626
00627 }
00628
00629 messVec* StLoggerManager::FindErrorList(const char* s1, const char* s2,
00630 const char* s3, const char* s4)
00631 {
00632 _NO_IMPLEMENTATION_;
00633 return 0;
00634
00635 }
00636
00637
00638
00639
00640
00641 ostrstream& StLoggerManager::Debug(const char* mess, const char* opt,const char *sourceFileName,int lineNumber)
00642 { return Message(mess, "D", opt,sourceFileName,lineNumber);}
00643
00644 int StLoggerManager::PrintDebug()
00645 {
00646 _NO_IMPLEMENTATION_;
00647 return 0;
00648
00649 }
00650
00651 const messVec* StLoggerManager::GetDebugs()
00652 {
00653 _NO_IMPLEMENTATION_; return 0;
00654
00655
00656 }
00657
00658 StMessage* StLoggerManager::FindDebug(const char* s1, const char* s2,
00659 const char* s3, const char* s4)
00660 {
00661 _NO_IMPLEMENTATION_; return 0;
00662
00663 }
00664
00665 messVec* StLoggerManager::FindDebugList(const char* s1, const char* s2,
00666 const char* s3, const char* s4)
00667 {
00668 _NO_IMPLEMENTATION_; return 0;
00669
00670 }
00671
00672
00673
00674
00675
00676 ostrstream& StLoggerManager::QAInfo(const char* mess, const char* opt,const char *sourceFileName,int lineNumber)
00677 { return Message(mess, "Q", opt,sourceFileName,lineNumber);}
00678
00679
00680
00681
00682 ostrstream& StLoggerManager::UCMInfo(const char* mess, const char* opt,const char *sourceFileName,int lineNumber)
00683 { return Message(mess, "U", opt,sourceFileName,lineNumber);}
00684
00685 void StLoggerManager::IgnoreRepeats()
00686 {
00687 AllowRepeats(0);
00688 }
00689
00690
00691 void StLoggerManager::AllowRepeats(int nRepeats)
00692 {
00693
00694
00695
00696 fAllowRepeat = nRepeats;
00697 fLastRepeatCounter = 0;
00698 StarOptionFilterPtr& filter = ((StLoggerManager *)mInstance)->GetStarOptionFilter();
00699 if (filter != 0 )
00700 filter->setRepeatCounterOption(nRepeats);
00701
00702 }
00703
00704
00705
00706 void StLoggerManager::AllowRepeats()
00707 {
00708 AllowRepeats(-1);
00709 }
00710
00711
00712
00713 int StLoggerManager::PrintQAInfo()
00714 {
00715 _NO_IMPLEMENTATION_; return 0;
00716
00717 }
00718
00719 const messVec* StLoggerManager::GetQAInfos()
00720 {
00721 _NO_IMPLEMENTATION_; return 0;
00722
00723 }
00724
00725 StMessage* StLoggerManager::FindQAInfo(const char* s1, const char* s2,
00726 const char* s3, const char* s4)
00727 {
00728 _NO_IMPLEMENTATION_; return 0;
00729
00730 }
00731
00732 messVec* StLoggerManager::FindQAInfoList(const char* s1, const char* s2,
00733 const char* s3, const char* s4)
00734 {
00735 _NO_IMPLEMENTATION_; return 0;
00736
00737 }
00738
00739
00740 int StLoggerManager::PrintUCMInfo()
00741 {
00742 _NO_IMPLEMENTATION_; return 0;
00743
00744 }
00745
00746 const messVec* StLoggerManager::GetUCMInfos()
00747 {
00748 _NO_IMPLEMENTATION_; return 0;
00749
00750 }
00751
00752 StMessage* StLoggerManager::FindUCMInfo(const char* s1, const char* s2,
00753 const char* s3, const char* s4)
00754 {
00755 _NO_IMPLEMENTATION_; return 0;
00756
00757 }
00758
00759 messVec* StLoggerManager::FindUCMInfoList(const char* s1, const char* s2,
00760 const char* s3, const char* s4)
00761 {
00762 _NO_IMPLEMENTATION_; return 0;
00763
00764 }
00765
00766
00767 ostrstream& StLoggerManager::Fatal(const char* mess, const char* opt,const char *sourceFileName, int lineNumber)
00768 { return Message(mess,"F",opt,sourceFileName,lineNumber);}
00769
00770
00771
00772 ostrstream& StLoggerManager::out(const char* mess)
00773 {return Message(mess,"I","OP-");}
00774
00775 ostrstream& StLoggerManager::err(const char* mess)
00776 {return Message(mess,"E","EP-");}
00777
00778
00779
00780
00781
00782 int StLoggerManager::PrintAll()
00783 {
00784 _NO_IMPLEMENTATION_; return 0;
00785
00786 }
00787
00788
00789 const messVec* StLoggerManager::GetAll()
00790 {
00791 _NO_IMPLEMENTATION_; return 0;
00792
00793
00794 }
00795
00796
00797 int StLoggerManager::RemoveMessage(const char* s1, const char* s2,
00798 const char* s3, const char* s4)
00799 { return RemoveMessage(FindMessage(s1,s2,s3,s4)); }
00800
00801
00802 void StLoggerManager::SetLimit(const char* str, int n)
00803 {
00804 if (str && str[0] && str[1]) {
00805 LoggerPtr root = Logger::getRootLogger();
00806 AppenderPtr defaultAppender = root->getAppender(_T("defaultAppender"));
00807 if (defaultAppender != 0){
00808 StarOptionFilterPtr filter = new StarOptionFilter();
00809 filter->setRepeatCounterOption(n);
00810 filter->setOption(_T("StringToCount"),str);
00811
00812
00813 defaultAppender->addFilter(filter);
00814 }
00815 }
00816
00817
00818 }
00819
00820 int StLoggerManager::GetLimit(const char* str)
00821 {
00822 _NO_IMPLEMENTATION_; return -1;
00823
00824 }
00825
00826 void StLoggerManager::ListLimits()
00827 {
00828 _NO_IMPLEMENTATION_;
00829
00830 }
00831
00832 void StLoggerManager::Close()
00833 {
00834
00835
00836 if (fgQALogger) fgQALogger->closeNestedAppenders();
00837 if (fgUCMLogger) fgUCMLogger->closeNestedAppenders();
00838 }
00839
00840 void StLoggerManager::RemoveLimit(const char* str)
00841 { SetLimit(str,-1); }
00842
00843 void StLoggerManager::SwitchOff(const char* str)
00844 { SetLimit(str,0); }
00845
00846 void StLoggerManager::SwitchOn(const char* str)
00847 { RemoveLimit(str); }
00848
00849 void StLoggerManager::FixOn(const char* str)
00850 { SetLimit(str,-5); }
00851
00852 void StLoggerManager::NoLimits()
00853 {
00854 _NO_IMPLEMENTATION_;
00855
00856 }
00857
00858 void StLoggerManager::MemoryOn()
00859 {
00860 _NO_IMPLEMENTATION_;
00861
00862 }
00863
00864 void StLoggerManager::MemoryOff()
00865 {
00866 _NO_IMPLEMENTATION_;
00867
00868 }
00869
00870 int StLoggerManager::ListTypes()
00871 {
00872 _NO_IMPLEMENTATION_; return 5;
00873
00874 }
00875
00876
00877 void StLoggerManager::SetLevel(Int_t level)
00878 {
00879
00880 switch (level) {
00881 case kFatal:
00882 fLogger->setLevel(LOG4CXX_LEVEL_FATAL);
00883 break;
00884 case kError:
00885 fLogger->setLevel(LOG4CXX_LEVEL_ERROR);
00886 break;
00887 case kWarning:
00888 fLogger->setLevel(LOG4CXX_LEVEL_WARN);
00889 break;
00890 case kInfo:
00891 fLogger->setLevel(LOG4CXX_LEVEL_INFO);
00892 break;
00893 case kAll:
00894 case kDebug:
00895 case kDebug2:
00896 fLogger->setLevel(LOG4CXX_LEVEL_DEBUG);
00897 break;
00898 case kDefault:
00899
00900 fLogger->setLevel(fDefaultLevel);
00901 break;
00902 default:
00903 fLogger->setLevel(LOG4CXX_LEVEL_DEBUG);
00904 break;
00905 };
00906 }
00907
00908 Int_t StLoggerManager::GetLevel(Int_t) const
00909 {
00910
00911 #if 0
00912 const LevelPtr &level = fLogger->getLevel();
00913 if (level == &LOG4CXX_LEVEL_DEBUG) return kDebug;
00914 else if (level == &LOG4CXX_LEVEL_FATAL) return kFatal;
00915 else if (level == &LOG4CXX_LEVEL_ERROR) return kError;
00916 else if (level == &LOG4CXX_LEVEL_WARN ) return kWarning;
00917 else if (level == &LOG4CXX_LEVEL_INFO ) return kInfo;
00918 #endif
00919 return kAll;
00920 }
00921
00922
00923 void StLoggerManager:: DestroyInstance()
00924 {
00925 if (mInstance) {
00926
00927
00928 fgUCMLogger->releaseRef();
00929
00930
00931
00932 mInstance = 0; gMessMgr = 0;
00933
00934 }
00935 }
00936 #if 0
00937
00938 const char *GetName()
00939 {
00940
00941 CurrentMessager()
00942 }
00943 #endif
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969
00970
00971
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050
01051
01052
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070