3 /**************************************************************************
4 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
7 * Timm Steinbeck <timm@kip.uni-heidelberg.de> *
8 * Artur Szostak <artursz@iafrica.com> *
9 * for The ALICE Off-line Project. *
11 * Permission to use, copy, modify and distribute this software and its *
12 * documentation strictly for non-commercial purposes is hereby granted *
13 * without fee, provided that the above copyright notice appears in all *
14 * copies and that both the copyright notice and this permission notice *
15 * appear in the supporting documentation. The authors make no claims *
16 * about the suitability of this software for any purpose. It is *
17 * provided "as is" without express or implied warranty. *
18 **************************************************************************/
20 ///////////////////////////////////////////////////////////////////////////////
22 // HLT logging tools //
24 ///////////////////////////////////////////////////////////////////////////////
32 #include "AliL3StandardIncludes.h"
33 #include "AliHLTLogging.h"
37 ClassImp(AliHLTLogging)
39 char AliHLTLogging::fLogBuffer[LOG_BUFFER_SIZE]="";
40 char AliHLTLogging::fOriginBuffer[LOG_BUFFER_SIZE]="";
42 AliHLTComponent_LogSeverity AliHLTLogging::fGlobalLogFilter=(AliHLTComponent_LogSeverity)0;
43 AliHLTfctLogging AliHLTLogging::fLoggingFunc=NULL;
45 AliHLTLogging::AliHLTLogging()
50 AliHLTLogging::~AliHLTLogging()
54 int AliHLTLogging::Message(void *param, AliHLTComponent_LogSeverity severity, const char* origin, const char* keyword, const char* message) {
56 const char* strSeverity="";
58 case kHLTLogBenchmark:
59 strSeverity="benchmark";
68 strSeverity="warning";
79 cout << "HLT Log " << strSeverity << ": " << origin << " (" << keyword << ") " << message << endl;
83 const char* AliHLTLogging::BuildLogString(const char *format, va_list ap) {
85 int iBufferSize=LOG_BUFFER_SIZE;
86 char* tgtBuffer=fLogBuffer;
89 tgtLen = snprintf(tgtBuffer, iBufferSize, LOG_PREFIX); // add logging prefix
91 tgtBuffer+=tgtLen; iBufferSize-=tgtLen;
92 tgtLen = vsnprintf(tgtBuffer, iBufferSize, format, ap);
95 // if (tgtLen<LOG_BUFFER_SIZE-1) {
96 // *tgtBuffer++='\n'; // add newline if space in buffer
98 *tgtBuffer=0; // terminate the buffer
104 int AliHLTLogging::Logging(AliHLTComponent_LogSeverity severity, const char* origin, const char* keyword, const char* format, ... ) {
106 va_start(args, format);
108 return (*fLoggingFunc)(NULL/*fParam*/, severity, origin, keyword, AliHLTLogging::BuildLogString(format, args ));
110 return Message(NULL/*fParam*/, severity, origin, keyword, AliHLTLogging::BuildLogString(format, args ));
115 int AliHLTLogging::LoggingVarargs( AliHLTComponent_LogSeverity severity, const char* origin_class, const char* origin_func, ... )
118 int iMaxSize=LOG_BUFFER_SIZE-1;
120 const char* separator="";
121 fOriginBuffer[iPos]=0;
123 if ((int)strlen(origin_class)<iMaxSize-iPos) {
124 strcpy(&fOriginBuffer[iPos], origin_class);
125 iPos+=strlen(origin_class);
130 if ((int)strlen(origin_func)+(int)strlen(separator)<iMaxSize-iPos) {
131 strcpy(&fOriginBuffer[iPos], separator);
132 iPos+=strlen(separator);
133 strcpy(&fOriginBuffer[iPos], origin_func);
134 iPos+=strlen(origin_func);
138 va_start(args, origin_func);
139 const char* format = va_arg(args, const char*);
141 const char* message=format;
142 char* qualifier=NULL;
143 const char* keyword="no key";
144 if ((qualifier=strchr(format, '%'))!=NULL) {
145 message=AliHLTLogging::BuildLogString(format, args);
148 iResult=(*fLoggingFunc)(NULL/*fParam*/, severity, fOriginBuffer, keyword, message);
150 iResult=Message(NULL/*fParam*/, severity, fOriginBuffer, keyword, message);
156 int AliHLTLogging::CheckFilter(AliHLTComponent_LogSeverity severity)