#include "TGo4Log.h" #include "Riostream.h" #include "TDatime.h" #include "TMutex.h" #include "TSystem.h" #include "snprintf.h" #include "TGo4LockGuard.h" const char* TGo4Log::fgcLEFT = "GO4-"; //const char* TGo4Log::fgcRIGHT = " -1 && prio %s %s", fgcLEFT, prefix, txtbuf,fgcRIGHT); if(fgbOutputEnabled) { cout << fgcMessagetext << endl; } return fgcMessagetext; } void TGo4Log::Debug(const char* text,...) { if(fgiIgnoreLevel>0) return; Instance(); TGo4LockGuard(fxMutex); char txtbuf[fguMESLEN]; va_list args; va_start(args, text); vsnprintf(txtbuf, fguMESLEN, text, args); va_end(args); Message(0,txtbuf); } void TGo4Log::Info(const char* text,...) { if(fgiIgnoreLevel>1) return; Instance(); TGo4LockGuard(fxMutex); char txtbuf[fguMESLEN]; va_list args; va_start(args, text); vsnprintf(txtbuf, fguMESLEN, text, args); va_end(args); Message(1,txtbuf); } void TGo4Log::Warn(const char* text,...) { if(fgiIgnoreLevel>2) return; Instance(); TGo4LockGuard(fxMutex); char txtbuf[fguMESLEN]; va_list args; va_start(args, text); vsnprintf(txtbuf, fguMESLEN, text, args); va_end(args); Message(2,txtbuf); } void TGo4Log::Error(const char* text,...) { Instance(); TGo4LockGuard(fxMutex); char txtbuf[fguMESLEN]; va_list args; va_start(args, text); vsnprintf(txtbuf, fguMESLEN, text, args); va_end(args); Message(3,txtbuf); } void TGo4Log::SetIgnoreLevel(Int_t level) { TGo4LockGuard(fxMutex); fgiIgnoreLevel=level; } Int_t TGo4Log::GetIgnoreLevel() { return fgiIgnoreLevel; } const char* TGo4Log::GetLogname() { return fgxLogName.Data(); } void TGo4Log::OutputEnable(Bool_t on) { TGo4LockGuard(fxMutex); fgbOutputEnabled=on; } Bool_t TGo4Log::IsOutputEnabled() { return fgbOutputEnabled; } void TGo4Log::LogfileEnable(Bool_t on) { TGo4LockGuard(fxMutex); fgbLogfileEnabled=on; } Bool_t TGo4Log::IsLogfileEnabled() { return fgbLogfileEnabled; } void TGo4Log::AutoEnable(Bool_t on) { TGo4LockGuard(fxMutex); fgbAutoMode=on; } Bool_t TGo4Log::IsAutoEnabled() { return fgbAutoMode; } void TGo4Log::OpenLogfile(const char* name, const char* headercomment, Bool_t appendmode) { TGo4LockGuard(fxMutex); try { CloseLogfile(); char txtbuf[fguMESLEN]; if(name==0) // default: encode pid into filename snprintf(txtbuf,fguMESLEN,"go4log-%d.txt", gSystem->GetPid()); else snprintf(txtbuf,fguMESLEN,"%s",name); std::ofstream* lf = new std::ofstream(txtbuf, appendmode ? std::ios::app : std::ios::out); if(lf->fail()) { LogfileEnable(kFALSE); delete lf; cerr <<"TGo4Log::OpenLogfile() - Error opening logfile "<< name << endl; } else { fgxLogfile = lf; fgxLogName = txtbuf; // remember our last filename } // write headercomment into the first lines: if(headercomment) WriteLogfile(headercomment, kFALSE); } // try catch(std::exception& ex) // treat standard library exceptions { cerr <<"standard exception "<