using namespace std;
#endif
-#ifndef NOALIROOT_LOGGING
-#include "AliLog.h"
-#endif
#include "AliHLTStdIncludes.h"
#include "AliHLTLogging.h"
+#include "AliHLTComponentHandler.h"
#include "TString.h"
-#include "TArrayC.h"
#include "Varargs.h"
#include <string>
#include <sstream>
#include <iostream>
-/** target stream for AliRoot logging methods */
-ostringstream gLogstr;
-
-#ifndef NOALIROOT_LOGGING
-/**
- * Notification callback for AliRoot logging methods
- */
-void LogNotification(AliLog::EType_t level, const char* message)
-{
- AliHLTLogging hltlog;
- hltlog.SwitchAliLog(0);
- hltlog.Logging(kHLTLogInfo, "NotificationHandler", "AliLog", gLogstr.str().c_str());
- gLogstr.clear();
- string empty("");
- gLogstr.str(empty);
-}
-#endif
-
-/**
- * The global logging buffer.
- * The buffer is created with an initial size and grown dynamically on
- * demand.
- */
-TArrayC gAliHLTLoggingTarget(200);
-
-/** the maximum size of the buffer */
-const int gALIHLTLOGGING_MAXBUFFERSIZE=10000;
-
/** ROOT macro for the implementation of ROOT specific class methods */
-ClassImp(AliHLTLogging)
+ClassImp(AliHLTLogging);
AliHLTLogging::AliHLTLogging()
:
return *this;
}
-AliHLTComponentLogSeverity AliHLTLogging::fGlobalLogFilter=kHLTLogAll;
-AliHLTfctLogging AliHLTLogging::fLoggingFunc=NULL;
+ostringstream AliHLTLogging::fgLogstr;
+AliHLTComponentLogSeverity AliHLTLogging::fgGlobalLogFilter=kHLTLogAll;
+AliHLTfctLogging AliHLTLogging::fgLoggingFunc=NULL;
+AliHLTLogging::AliHLTDynamicMessage AliHLTLogging::fgAliLoggingFunc=NULL;
int AliHLTLogging::fgUseAliLog=1;
AliHLTLogging::~AliHLTLogging()
// see header file for class documentation
}
+// the array will be grown dynamically, this is just an initial size
+TArrayC AliHLTLogging::fgAliHLTLoggingTarget(200);
+// the maximum size of the array
+const int AliHLTLogging::fgkALIHLTLOGGINGMAXBUFFERSIZE=10000;
+
int AliHLTLogging::Init(AliHLTfctLogging pFun)
{
// see header file for class documentation
- if (fLoggingFunc!=NULL && fLoggingFunc!=pFun) {
- (*fLoggingFunc)(NULL/*fParam*/, kHLTLogWarning, "AliHLTLogging::Init", "no key", "overriding previously initialized logging function");
+ if (fgLoggingFunc!=NULL && fgLoggingFunc!=pFun) {
+ (*fgLoggingFunc)(NULL/*fParam*/, kHLTLogWarning, "AliHLTLogging::Init", "no key", "overriding previously initialized logging function");
}
- fLoggingFunc=pFun;
- // older versions of AliLog does not support the notification callback and
- // stringstreams, but they support the logging macros in general
-#ifndef NOALIROOT_LOGGING
-#ifndef NO_ALILOG_NOTIFICATION
- AliLog* log=new AliLog;
- log->SetLogNotification(LogNotification);
- log->SetStreamOutput(&gLogstr);
-#endif // NO_ALILOG_NOTIFICATION
-#endif // NOALIROOT_LOGGING
+ fgLoggingFunc=pFun;
return 0;
}
+int AliHLTLogging::InitAliLogTrap(AliHLTComponentHandler* pHandler)
+{
+ // see header file for class documentation
+ int iResult=0;
+ if (pHandler) {
+ AliHLTComponentLogSeverity loglevel=pHandler->GetLocalLoggingLevel();
+ pHandler->SetLocalLoggingLevel(kHLTLogError);
+ pHandler->LoadLibrary("libAliHLTUtil.so");
+ pHandler->SetLocalLoggingLevel(loglevel);
+ InitAliDynamicMessageCallback pFunc=(InitAliDynamicMessageCallback)pHandler->FindSymbol("libAliHLTUtil.so", "InitAliDynamicMessageCallback");
+ if (pFunc) {
+ iResult=(*pFunc)();
+ } else {
+ Message(NULL, kHLTLogError, "AliHLTLogging::InitAliLogTrap", "init logging",
+ "can not initialize AliLog callback");
+ iResult=-ENOSYS;
+ }
+ } else {
+ iResult=-EINVAL;
+ }
+
+ return iResult;
+}
+
int AliHLTLogging::Message(void *param, AliHLTComponentLogSeverity severity,
const char* origin, const char* keyword,
const char* message)
}
TString out="HLT Log ";
out+=strSeverity;
- if (origin) {out+=": "; out+=origin;}
+ if (origin && origin[0]!=0) {out+=": <"; out+=origin; out+="> ";}
out+=" "; out+=message;
if (keyword!=NULL && strcmp(keyword, HLT_DEFAULT_LOG_KEYWORD)!=0) {
out+=" ("; out+=keyword; out +=")";
return iResult;
}
-#ifndef NOALIROOT_LOGGING
+#if 0
int AliHLTLogging::AliMessage(AliHLTComponentLogSeverity severity,
- const char* origin_class, const char* origin_func,
+ const char* originClass, const char* originFunc,
const char* file, int line, const char* message)
{
// see header file for class documentation
switch (severity) {
case kHLTLogBenchmark:
- AliLog::Message(AliLog::kInfo, message, "HLT", origin_class, origin_func, file, line);
+ AliLog::Message(AliLog::kInfo, message, "HLT", originClass, originFunc, file, line);
break;
case kHLTLogDebug:
- AliLog::Message(AliLog::kDebug, message, "HLT", origin_class, origin_func, file, line);
+ AliLog::Message(AliLog::kDebug, message, "HLT", originClass, originFunc, file, line);
break;
case kHLTLogInfo:
- AliLog::Message(AliLog::kInfo, message, "HLT", origin_class, origin_func, file, line);
+ AliLog::Message(AliLog::kInfo, message, "HLT", originClass, originFunc, file, line);
break;
case kHLTLogWarning:
- AliLog::Message(AliLog::kWarning, message, "HLT", origin_class, origin_func, file, line);
+ AliLog::Message(AliLog::kWarning, message, "HLT", originClass, originFunc, file, line);
break;
case kHLTLogError:
- AliLog::Message(AliLog::kError, message, "HLT", origin_class, origin_func, file, line);
+ AliLog::Message(AliLog::kError, message, "HLT", originClass, originFunc, file, line);
break;
case kHLTLogFatal:
- AliLog::Message(AliLog::kWarning, message, "HLT", origin_class, origin_func, file, line);
+ AliLog::Message(AliLog::kWarning, message, "HLT", originClass, originFunc, file, line);
break;
default:
break;
// see header file for class documentation
int iResult=0;
+#ifdef R__VA_COPY
va_list bap;
R__VA_COPY(bap, ap);
+#endif //R__VA_COPY
// take the first argument from the list as format string if no
// format was given
const char* fmt = format;
if (fmt==NULL) fmt=va_arg(ap, const char*);
- gAliHLTLoggingTarget[0]=0;
+ fgAliHLTLoggingTarget[0]=0;
while (fmt!=NULL) {
- iResult=vsnprintf(gAliHLTLoggingTarget.GetArray(), gAliHLTLoggingTarget.GetSize(), fmt, ap);
+ iResult=vsnprintf(fgAliHLTLoggingTarget.GetArray(), fgAliHLTLoggingTarget.GetSize(), fmt, ap);
if (iResult==-1)
// for compatibility with older version of vsnprintf
- iResult=gAliHLTLoggingTarget.GetSize()*2;
- else if (iResult<gAliHLTLoggingTarget.GetSize())
+ iResult=fgAliHLTLoggingTarget.GetSize()*2;
+ else if (iResult<fgAliHLTLoggingTarget.GetSize())
break;
// terminate if buffer is already at the limit
- if (gAliHLTLoggingTarget.GetSize()>=gALIHLTLOGGING_MAXBUFFERSIZE) {
- gAliHLTLoggingTarget[gAliHLTLoggingTarget.GetSize()-1]=0;
+ if (fgAliHLTLoggingTarget.GetSize()>=fgkALIHLTLOGGINGMAXBUFFERSIZE)
+ {
+ fgAliHLTLoggingTarget[fgAliHLTLoggingTarget.GetSize()-1]=0;
break;
}
// check limitation and grow the buffer
- if (iResult>gALIHLTLOGGING_MAXBUFFERSIZE) iResult=gALIHLTLOGGING_MAXBUFFERSIZE;
- gAliHLTLoggingTarget.Set(iResult+1);
+ if (iResult>fgkALIHLTLOGGINGMAXBUFFERSIZE) iResult=fgkALIHLTLOGGINGMAXBUFFERSIZE;
+ fgAliHLTLoggingTarget.Set(iResult+1);
// copy the original list and skip the first argument if this was the format string
+#ifdef R__VA_COPY
va_end(ap);
R__VA_COPY(ap, bap);
+#else
+ fgAliHLTLoggingTarget[fgAliHLTLoggingTarget.GetSize()-1]=0;
+ break;
+#endif //R__VA_COPY
if (format==NULL) va_arg(ap, const char*);
}
+#ifdef R__VA_COPY
va_end(bap);
+#endif //R__VA_COPY
- return gAliHLTLoggingTarget.GetArray();
+ return fgAliHLTLoggingTarget.GetArray();
}
int AliHLTLogging::Logging(AliHLTComponentLogSeverity severity,
if (iResult>0) {
va_list args;
va_start(args, format);
- if (fLoggingFunc) {
- iResult = (*fLoggingFunc)(NULL/*fParam*/, severity, origin, keyword, AliHLTLogging::BuildLogString(format, args ));
+ if (fgLoggingFunc) {
+ iResult = (*fgLoggingFunc)(NULL/*fParam*/, severity, origin, keyword, AliHLTLogging::BuildLogString(format, args ));
} else {
-#ifndef NOALIROOT_LOGGING
- if (fgUseAliLog)
- iResult=AliMessage(severity, NULL, origin, NULL, 0, AliHLTLogging::BuildLogString(format, args ));
+ if (fgUseAliLog!=0 && fgAliLoggingFunc!=NULL)
+ iResult=(*fgAliLoggingFunc)(severity, NULL, origin, NULL, 0, AliHLTLogging::BuildLogString(format, args ));
else
-#endif
iResult=Message(NULL/*fParam*/, severity, origin, keyword, AliHLTLogging::BuildLogString(format, args ));
}
va_end(args);
}
int AliHLTLogging::LoggingVarargs(AliHLTComponentLogSeverity severity,
- const char* origin_class, const char* origin_func,
+ const char* originClass, const char* originFunc,
const char* file, int line, ... ) const
{
// see header file for class documentation
if (iResult>0) {
const char* separator="";
TString origin;
- if (origin_class) {
- origin+=origin_class;
+ if (originClass) {
+ origin+=originClass;
separator="::";
}
- if (origin_func) {
+ if (originFunc) {
origin+=separator;
- origin+=origin_func;
+ origin+=originFunc;
}
va_list args;
va_start(args, line);
- if (fLoggingFunc) {
- iResult=(*fLoggingFunc)(NULL/*fParam*/, severity, origin.Data(), GetKeyword(), AliHLTLogging::BuildLogString(NULL, args ));
+ if (fgLoggingFunc) {
+ iResult=(*fgLoggingFunc)(NULL/*fParam*/, severity, origin.Data(), GetKeyword(), AliHLTLogging::BuildLogString(NULL, args ));
} else {
-#ifndef NOALIROOT_LOGGING
- if (fgUseAliLog)
- iResult=AliMessage(severity, origin_class, origin_func, file, line, AliHLTLogging::BuildLogString(NULL, args ));
+ if (fgUseAliLog!=0 && fgAliLoggingFunc!=NULL)
+ iResult=(*fgAliLoggingFunc)(severity, originClass, originFunc, file, line, AliHLTLogging::BuildLogString(NULL, args ));
else
-#endif
iResult=Message(NULL/*fParam*/, severity, origin.Data(), GetKeyword(), AliHLTLogging::BuildLogString(NULL, args ));
}
va_end(args);
{
// see header file for class documentation
- int iResult=severity==kHLTLogNone || (severity&fGlobalLogFilter)>0 && (severity&fLocalLogFilter)>0;
+ int iResult=severity==kHLTLogNone || (severity&fgGlobalLogFilter)>0 && (severity&fLocalLogFilter)>0;
return iResult;
}
{
// see header file for class documentation
- fGlobalLogFilter=level;
+ fgGlobalLogFilter=level;
+}
+
+AliHLTComponentLogSeverity AliHLTLogging::GetGlobalLoggingLevel()
+{
+ // see header file for class documentation
+
+ return fgGlobalLogFilter;
}
void AliHLTLogging::SetLocalLoggingLevel(AliHLTComponentLogSeverity level)
fLocalLogFilter=level;
}
+
+
+AliHLTComponentLogSeverity AliHLTLogging::GetLocalLoggingLevel()
+{
+ // see header file for class documentation
+
+ return fLocalLogFilter;
+}