ROOT logo
// $Id$

///**************************************************************************
///* This file is property of and copyright by the                          * 
///* ALICE Experiment at CERN, All rights reserved.                         *
///*                                                                        *
///* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
///*                  for The ALICE HLT Project.                            *
///*                                                                        *
///* Permission to use, copy, modify and distribute this software and its   *
///* documentation strictly for non-commercial purposes is hereby granted   *
///* without fee, provided that the above copyright notice appears in all   *
///* copies and that both the copyright notice and this permission notice   *
///* appear in the supporting documentation. The authors make no claims     *
///* about the suitability of this software for any purpose. It is          *
///* provided "as is" without express or implied warranty.                  *
///**************************************************************************

/// @file   AliHLTLogging.cxx
/// @author Matthias Richter, Timm Steinbeck
/// @date   
/// @brief  Implementation of HLT logging primitives.
///

#include "AliHLTStdIncludes.h"
#include "AliHLTLogging.h"
#include "AliHLTComponentHandler.h"
#include "TString.h"
#include "Varargs.h"
#include <string>
#include <sstream>
#include <iostream>

using std::cout;
using std::cerr;
using std::endl;

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTLogging);

AliHLTLogging::AliHLTLogging()
  :
  fLocalLogFilter(fgLocalLogDefault),
  fpDefaultKeyword(NULL),
  fpCurrentKeyword(NULL)
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
}

AliHLTLogging::AliHLTLogging(const AliHLTLogging&)
  :
  fLocalLogFilter(kHLTLogAll),
  fpDefaultKeyword(NULL),
  fpCurrentKeyword(NULL)
{
  // see header file for class documentation
  HLTFatal("copy constructor untested");
}

AliHLTLogging& AliHLTLogging::operator=(const AliHLTLogging&)
{ 
  // see header file for class documentation
  HLTFatal("assignment operator untested");
  return *this;
}

ostringstream AliHLTLogging::fgLogstr;
AliHLTComponentLogSeverity AliHLTLogging::fgGlobalLogFilter=kHLTLogAll;
AliHLTComponentLogSeverity AliHLTLogging::fgLocalLogDefault=kHLTLogAll;
AliHLTfctLogging AliHLTLogging::fgLoggingFunc=NULL;
AliHLTLogging::AliHLTDynamicMessage AliHLTLogging::fgAliLoggingFunc=NULL;
int AliHLTLogging::fgUseAliLog=1;

TString AliHLTLogging::fgBlackList="";
TString AliHLTLogging::fgWhiteList="";

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 (fgLoggingFunc!=NULL && fgLoggingFunc!=pFun) {
    (*fgLoggingFunc)(NULL/*fParam*/, kHLTLogWarning, "AliHLTLogging::Init", "no key", "overriding previously initialized logging function");    
  }
  fgLoggingFunc=pFun;
  
  return 0;
}

int AliHLTLogging::InitAliLogTrap(AliHLTComponentHandler* pHandler)
{
  // see header file for class documentation
  // init the AliRoot logging trap
  // AliLog messages are redirected to PubSub,
  int iResult=0;
  if (pHandler) {
    // set temporary loglevel of component handler
    AliHLTComponentLogSeverity loglevel=pHandler->GetLocalLoggingLevel();
    pHandler->SetLocalLoggingLevel(kHLTLogError);

    // load library containing AliRoot dependencies and initialization handler
    pHandler->LoadLibrary(ALILOG_WRAPPER_LIBRARY, 0/* do not activate agents */);

    // restore loglevel
    pHandler->SetLocalLoggingLevel(loglevel);

    // find the symbol
    InitAliDynamicMessageCallback pFunc=(InitAliDynamicMessageCallback)pHandler->FindSymbol(ALILOG_WRAPPER_LIBRARY, "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::InitAliLogFunc(AliHLTComponentHandler* pHandler)
{
  // see header file for class documentation
  int iResult=0;
  if (pHandler) {
    // set temporary loglevel of component handler
    AliHLTComponentLogSeverity loglevel=pHandler->GetLocalLoggingLevel();
    pHandler->SetLocalLoggingLevel(kHLTLogError);

    // load library containing AliRoot dependencies and initialization handler
    pHandler->LoadLibrary(ALILOG_WRAPPER_LIBRARY, 0/* do not activate agents */);

    // restore loglevel
    pHandler->SetLocalLoggingLevel(loglevel);

    // find the symbol
    fgAliLoggingFunc=(AliHLTLogging::AliHLTDynamicMessage)pHandler->FindSymbol(ALILOG_WRAPPER_LIBRARY, "AliDynamicMessage");
    if (fgAliLoggingFunc==NULL) {
      Message(NULL, kHLTLogError, "AliHLTLogging::InitAliLogFunc", "init logging",
	      "symbol lookup failure: can not find AliDynamicMessage, switching to HLT logging system");
      iResult=-ENOSYS;
    }
  } else {
    iResult=-EINVAL;
  }
  
  return iResult;
}

int AliHLTLogging::Message(void *param, AliHLTComponentLogSeverity severity,
			   const char* origin, const char* keyword,
			   const char* message) 
{
  // see header file for class documentation
  int iResult=0;
  if (param==NULL) {
    // this is currently just to get rid of the warning "unused parameter"
  }

  const char* strSeverity="";
  switch (severity) {
  case kHLTLogBenchmark: 
    strSeverity="benchmark";
    break;
  case kHLTLogDebug:
    strSeverity="debug";
    break;
  case kHLTLogInfo:
    strSeverity="info";
    break;
  case kHLTLogWarning:
    strSeverity="warning";
    break;
  case kHLTLogError:
    strSeverity="error";
    break;
  case kHLTLogFatal:
    strSeverity="fatal";
    break;
  case kHLTLogImportant:
    strSeverity="notify";
    break;
  default:
    break;
  }
  TString out="HLT Log ";
  out+=strSeverity;
  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 +=")";
  }
  cout << out.Data() << endl;
  return iResult;
}

#if 0
int AliHLTLogging::AliMessage(AliHLTComponentLogSeverity severity, 
			      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", originClass, originFunc, file, line);
    break;
  case kHLTLogDebug:
    AliLog::Message(AliLog::kDebug, message, "HLT", originClass, originFunc, file, line);
    break;
  case kHLTLogInfo:
    AliLog::Message(AliLog::kInfo, message, "HLT", originClass, originFunc, file, line);
    break;
  case kHLTLogWarning:
    AliLog::Message(AliLog::kWarning, message, "HLT", originClass, originFunc, file, line);
    break;
  case kHLTLogError:
    AliLog::Message(AliLog::kError, message, "HLT", originClass, originFunc, file, line);
    break;
  case kHLTLogFatal:
    AliLog::Message(AliLog::kWarning, message, "HLT", originClass, originFunc, file, line);
    break;
  default:
    break;
  }
  return 0;
}
#endif

const char* AliHLTLogging::BuildLogString(const char *format, va_list &ap, bool bAppend) 
{
  // 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*);

  unsigned int iOffset=0;
  if (bAppend) {
    iOffset=strlen(fgAliHLTLoggingTarget.GetArray());
  } else {
    fgAliHLTLoggingTarget[0]=0;
  }
  while (fmt!=NULL) {
    iResult=vsnprintf(fgAliHLTLoggingTarget.GetArray()+iOffset, fgAliHLTLoggingTarget.GetSize()-iOffset, fmt, ap);
    if (iResult==-1)
      // for compatibility with older version of vsnprintf
      iResult=fgAliHLTLoggingTarget.GetSize()*2;
    else
      iResult+=iOffset;

    if (iResult<fgAliHLTLoggingTarget.GetSize())
      // everything in the limit
      break;

    // terminate if buffer is already at the limit
    if (fgAliHLTLoggingTarget.GetSize()>=fgkALIHLTLOGGINGMAXBUFFERSIZE) 
    {
      fgAliHLTLoggingTarget[fgAliHLTLoggingTarget.GetSize()-1]=0;
      break;
    }

    // check limitation and grow the buffer
    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 fgAliHLTLoggingTarget.GetArray();
}

const char* AliHLTLogging::SetLogString(const void* p, const char* pfmt, const char *format, ...)
{
  // see header file for class documentation
  if (!p || !pfmt) return NULL;
  TString formatstr=format;
  TString pstr;
#ifdef __DEBUG
  pstr.Form(pfmt, p);
#endif
  formatstr.ReplaceAll("_pfmt_", pstr);
  va_list args;
  va_start(args, format);

  const char* message=BuildLogString(formatstr.Data(), args);
  va_end(args);

  return message;
}

int AliHLTLogging::Logging(AliHLTComponentLogSeverity severity,
			   const char* origin, const char* keyword,
			   const char* format, ... ) 
{
  // see header file for class documentation
  int iResult=CheckFilter(severity);
  if (iResult>0) {
    va_list args;
    va_start(args, format);
    if (fgLoggingFunc) {
      iResult = (*fgLoggingFunc)(NULL/*fParam*/, severity, origin, keyword, AliHLTLogging::BuildLogString(format, args ));
    } else {
      if (fgUseAliLog!=0 && fgAliLoggingFunc!=NULL)
	iResult=(*fgAliLoggingFunc)(severity, NULL, origin, NULL, 0, AliHLTLogging::BuildLogString(format, args ));
      else
        iResult=Message(NULL/*fParam*/, severity, origin, keyword, AliHLTLogging::BuildLogString(format, args ));
    }
    va_end(args);
  }
  return iResult;
}

int AliHLTLogging::LoggingVarargs(AliHLTComponentLogSeverity severity, 
				  const char* originClass, const char* originFunc,
				  const char* file, int line,  ... ) const
{
  // see header file for class documentation
  int iResult=0;

  va_list args;
  va_start(args, line);

  iResult=SendMessage(severity, originClass, originFunc, file, line, AliHLTLogging::BuildLogString(NULL, args ));
  va_end(args);

  return iResult;
}

int AliHLTLogging::SendMessage(AliHLTComponentLogSeverity severity, 
			       const char* originClass, const char* originFunc,
			       const char* file, int line,
			       const char* message) const
{
  // see header file for class documentation
  int iResult=0;
  const char* separator="";
  TString origin;
  if (originClass) {
    origin+=originClass;
    separator="::";
  }
  if (originFunc) {
    origin+=separator;
    origin+=originFunc;
  }

  if (fgLoggingFunc) {
    iResult=(*fgLoggingFunc)(NULL/*fParam*/, severity, origin.Data(), GetKeyword(), message);
  } else {
    if (fgUseAliLog!=0 && fgAliLoggingFunc!=NULL)
      iResult=(*fgAliLoggingFunc)(severity, originClass, originFunc, file, line, message);
    else
      iResult=Message(NULL/*fParam*/, severity, origin.Data(), GetKeyword(), message);
  }
  return iResult;
}

int AliHLTLogging::CheckFilter(AliHLTComponentLogSeverity severity) const
{
  // see header file for class documentation

  int iResult=severity==kHLTLogNone || ((severity&fgGlobalLogFilter)>0 && (severity&fLocalLogFilter)>0);
  return iResult;
}

void AliHLTLogging::SetGlobalLoggingLevel(AliHLTComponentLogSeverity level)
{
  // see header file for class documentation

  fgGlobalLogFilter=level;
}

AliHLTComponentLogSeverity AliHLTLogging::GetGlobalLoggingLevel()
{
  // see header file for class documentation

  return fgGlobalLogFilter;
}

void AliHLTLogging::SetLocalLoggingLevel(AliHLTComponentLogSeverity level)
{
  // see header file for class documentation

  fLocalLogFilter=level;
}


AliHLTComponentLogSeverity AliHLTLogging::GetLocalLoggingLevel()
{
  // see header file for class documentation

  return fLocalLogFilter;
}

void AliHLTLogging::SetLocalLoggingDefault(AliHLTComponentLogSeverity level)
{
  // see header file for class documentation
  fgLocalLogDefault=level;
}

int AliHLTLogging::CheckGroup(const char* /*originClass*/) const
{
  // see header file for class documentation

  return 1;
}

int AliHLTLogging::SetBlackList(const char* classnames)
{
  // see header file for class documentation

  if (classnames)
    fgBlackList=classnames;
  return 0;
}

int AliHLTLogging::SetWhiteList(const char* classnames)
{
  // see header file for class documentation

  if (classnames)
    fgWhiteList=classnames;
  return 0;
}
 AliHLTLogging.cxx:1
 AliHLTLogging.cxx:2
 AliHLTLogging.cxx:3
 AliHLTLogging.cxx:4
 AliHLTLogging.cxx:5
 AliHLTLogging.cxx:6
 AliHLTLogging.cxx:7
 AliHLTLogging.cxx:8
 AliHLTLogging.cxx:9
 AliHLTLogging.cxx:10
 AliHLTLogging.cxx:11
 AliHLTLogging.cxx:12
 AliHLTLogging.cxx:13
 AliHLTLogging.cxx:14
 AliHLTLogging.cxx:15
 AliHLTLogging.cxx:16
 AliHLTLogging.cxx:17
 AliHLTLogging.cxx:18
 AliHLTLogging.cxx:19
 AliHLTLogging.cxx:20
 AliHLTLogging.cxx:21
 AliHLTLogging.cxx:22
 AliHLTLogging.cxx:23
 AliHLTLogging.cxx:24
 AliHLTLogging.cxx:25
 AliHLTLogging.cxx:26
 AliHLTLogging.cxx:27
 AliHLTLogging.cxx:28
 AliHLTLogging.cxx:29
 AliHLTLogging.cxx:30
 AliHLTLogging.cxx:31
 AliHLTLogging.cxx:32
 AliHLTLogging.cxx:33
 AliHLTLogging.cxx:34
 AliHLTLogging.cxx:35
 AliHLTLogging.cxx:36
 AliHLTLogging.cxx:37
 AliHLTLogging.cxx:38
 AliHLTLogging.cxx:39
 AliHLTLogging.cxx:40
 AliHLTLogging.cxx:41
 AliHLTLogging.cxx:42
 AliHLTLogging.cxx:43
 AliHLTLogging.cxx:44
 AliHLTLogging.cxx:45
 AliHLTLogging.cxx:46
 AliHLTLogging.cxx:47
 AliHLTLogging.cxx:48
 AliHLTLogging.cxx:49
 AliHLTLogging.cxx:50
 AliHLTLogging.cxx:51
 AliHLTLogging.cxx:52
 AliHLTLogging.cxx:53
 AliHLTLogging.cxx:54
 AliHLTLogging.cxx:55
 AliHLTLogging.cxx:56
 AliHLTLogging.cxx:57
 AliHLTLogging.cxx:58
 AliHLTLogging.cxx:59
 AliHLTLogging.cxx:60
 AliHLTLogging.cxx:61
 AliHLTLogging.cxx:62
 AliHLTLogging.cxx:63
 AliHLTLogging.cxx:64
 AliHLTLogging.cxx:65
 AliHLTLogging.cxx:66
 AliHLTLogging.cxx:67
 AliHLTLogging.cxx:68
 AliHLTLogging.cxx:69
 AliHLTLogging.cxx:70
 AliHLTLogging.cxx:71
 AliHLTLogging.cxx:72
 AliHLTLogging.cxx:73
 AliHLTLogging.cxx:74
 AliHLTLogging.cxx:75
 AliHLTLogging.cxx:76
 AliHLTLogging.cxx:77
 AliHLTLogging.cxx:78
 AliHLTLogging.cxx:79
 AliHLTLogging.cxx:80
 AliHLTLogging.cxx:81
 AliHLTLogging.cxx:82
 AliHLTLogging.cxx:83
 AliHLTLogging.cxx:84
 AliHLTLogging.cxx:85
 AliHLTLogging.cxx:86
 AliHLTLogging.cxx:87
 AliHLTLogging.cxx:88
 AliHLTLogging.cxx:89
 AliHLTLogging.cxx:90
 AliHLTLogging.cxx:91
 AliHLTLogging.cxx:92
 AliHLTLogging.cxx:93
 AliHLTLogging.cxx:94
 AliHLTLogging.cxx:95
 AliHLTLogging.cxx:96
 AliHLTLogging.cxx:97
 AliHLTLogging.cxx:98
 AliHLTLogging.cxx:99
 AliHLTLogging.cxx:100
 AliHLTLogging.cxx:101
 AliHLTLogging.cxx:102
 AliHLTLogging.cxx:103
 AliHLTLogging.cxx:104
 AliHLTLogging.cxx:105
 AliHLTLogging.cxx:106
 AliHLTLogging.cxx:107
 AliHLTLogging.cxx:108
 AliHLTLogging.cxx:109
 AliHLTLogging.cxx:110
 AliHLTLogging.cxx:111
 AliHLTLogging.cxx:112
 AliHLTLogging.cxx:113
 AliHLTLogging.cxx:114
 AliHLTLogging.cxx:115
 AliHLTLogging.cxx:116
 AliHLTLogging.cxx:117
 AliHLTLogging.cxx:118
 AliHLTLogging.cxx:119
 AliHLTLogging.cxx:120
 AliHLTLogging.cxx:121
 AliHLTLogging.cxx:122
 AliHLTLogging.cxx:123
 AliHLTLogging.cxx:124
 AliHLTLogging.cxx:125
 AliHLTLogging.cxx:126
 AliHLTLogging.cxx:127
 AliHLTLogging.cxx:128
 AliHLTLogging.cxx:129
 AliHLTLogging.cxx:130
 AliHLTLogging.cxx:131
 AliHLTLogging.cxx:132
 AliHLTLogging.cxx:133
 AliHLTLogging.cxx:134
 AliHLTLogging.cxx:135
 AliHLTLogging.cxx:136
 AliHLTLogging.cxx:137
 AliHLTLogging.cxx:138
 AliHLTLogging.cxx:139
 AliHLTLogging.cxx:140
 AliHLTLogging.cxx:141
 AliHLTLogging.cxx:142
 AliHLTLogging.cxx:143
 AliHLTLogging.cxx:144
 AliHLTLogging.cxx:145
 AliHLTLogging.cxx:146
 AliHLTLogging.cxx:147
 AliHLTLogging.cxx:148
 AliHLTLogging.cxx:149
 AliHLTLogging.cxx:150
 AliHLTLogging.cxx:151
 AliHLTLogging.cxx:152
 AliHLTLogging.cxx:153
 AliHLTLogging.cxx:154
 AliHLTLogging.cxx:155
 AliHLTLogging.cxx:156
 AliHLTLogging.cxx:157
 AliHLTLogging.cxx:158
 AliHLTLogging.cxx:159
 AliHLTLogging.cxx:160
 AliHLTLogging.cxx:161
 AliHLTLogging.cxx:162
 AliHLTLogging.cxx:163
 AliHLTLogging.cxx:164
 AliHLTLogging.cxx:165
 AliHLTLogging.cxx:166
 AliHLTLogging.cxx:167
 AliHLTLogging.cxx:168
 AliHLTLogging.cxx:169
 AliHLTLogging.cxx:170
 AliHLTLogging.cxx:171
 AliHLTLogging.cxx:172
 AliHLTLogging.cxx:173
 AliHLTLogging.cxx:174
 AliHLTLogging.cxx:175
 AliHLTLogging.cxx:176
 AliHLTLogging.cxx:177
 AliHLTLogging.cxx:178
 AliHLTLogging.cxx:179
 AliHLTLogging.cxx:180
 AliHLTLogging.cxx:181
 AliHLTLogging.cxx:182
 AliHLTLogging.cxx:183
 AliHLTLogging.cxx:184
 AliHLTLogging.cxx:185
 AliHLTLogging.cxx:186
 AliHLTLogging.cxx:187
 AliHLTLogging.cxx:188
 AliHLTLogging.cxx:189
 AliHLTLogging.cxx:190
 AliHLTLogging.cxx:191
 AliHLTLogging.cxx:192
 AliHLTLogging.cxx:193
 AliHLTLogging.cxx:194
 AliHLTLogging.cxx:195
 AliHLTLogging.cxx:196
 AliHLTLogging.cxx:197
 AliHLTLogging.cxx:198
 AliHLTLogging.cxx:199
 AliHLTLogging.cxx:200
 AliHLTLogging.cxx:201
 AliHLTLogging.cxx:202
 AliHLTLogging.cxx:203
 AliHLTLogging.cxx:204
 AliHLTLogging.cxx:205
 AliHLTLogging.cxx:206
 AliHLTLogging.cxx:207
 AliHLTLogging.cxx:208
 AliHLTLogging.cxx:209
 AliHLTLogging.cxx:210
 AliHLTLogging.cxx:211
 AliHLTLogging.cxx:212
 AliHLTLogging.cxx:213
 AliHLTLogging.cxx:214
 AliHLTLogging.cxx:215
 AliHLTLogging.cxx:216
 AliHLTLogging.cxx:217
 AliHLTLogging.cxx:218
 AliHLTLogging.cxx:219
 AliHLTLogging.cxx:220
 AliHLTLogging.cxx:221
 AliHLTLogging.cxx:222
 AliHLTLogging.cxx:223
 AliHLTLogging.cxx:224
 AliHLTLogging.cxx:225
 AliHLTLogging.cxx:226
 AliHLTLogging.cxx:227
 AliHLTLogging.cxx:228
 AliHLTLogging.cxx:229
 AliHLTLogging.cxx:230
 AliHLTLogging.cxx:231
 AliHLTLogging.cxx:232
 AliHLTLogging.cxx:233
 AliHLTLogging.cxx:234
 AliHLTLogging.cxx:235
 AliHLTLogging.cxx:236
 AliHLTLogging.cxx:237
 AliHLTLogging.cxx:238
 AliHLTLogging.cxx:239
 AliHLTLogging.cxx:240
 AliHLTLogging.cxx:241
 AliHLTLogging.cxx:242
 AliHLTLogging.cxx:243
 AliHLTLogging.cxx:244
 AliHLTLogging.cxx:245
 AliHLTLogging.cxx:246
 AliHLTLogging.cxx:247
 AliHLTLogging.cxx:248
 AliHLTLogging.cxx:249
 AliHLTLogging.cxx:250
 AliHLTLogging.cxx:251
 AliHLTLogging.cxx:252
 AliHLTLogging.cxx:253
 AliHLTLogging.cxx:254
 AliHLTLogging.cxx:255
 AliHLTLogging.cxx:256
 AliHLTLogging.cxx:257
 AliHLTLogging.cxx:258
 AliHLTLogging.cxx:259
 AliHLTLogging.cxx:260
 AliHLTLogging.cxx:261
 AliHLTLogging.cxx:262
 AliHLTLogging.cxx:263
 AliHLTLogging.cxx:264
 AliHLTLogging.cxx:265
 AliHLTLogging.cxx:266
 AliHLTLogging.cxx:267
 AliHLTLogging.cxx:268
 AliHLTLogging.cxx:269
 AliHLTLogging.cxx:270
 AliHLTLogging.cxx:271
 AliHLTLogging.cxx:272
 AliHLTLogging.cxx:273
 AliHLTLogging.cxx:274
 AliHLTLogging.cxx:275
 AliHLTLogging.cxx:276
 AliHLTLogging.cxx:277
 AliHLTLogging.cxx:278
 AliHLTLogging.cxx:279
 AliHLTLogging.cxx:280
 AliHLTLogging.cxx:281
 AliHLTLogging.cxx:282
 AliHLTLogging.cxx:283
 AliHLTLogging.cxx:284
 AliHLTLogging.cxx:285
 AliHLTLogging.cxx:286
 AliHLTLogging.cxx:287
 AliHLTLogging.cxx:288
 AliHLTLogging.cxx:289
 AliHLTLogging.cxx:290
 AliHLTLogging.cxx:291
 AliHLTLogging.cxx:292
 AliHLTLogging.cxx:293
 AliHLTLogging.cxx:294
 AliHLTLogging.cxx:295
 AliHLTLogging.cxx:296
 AliHLTLogging.cxx:297
 AliHLTLogging.cxx:298
 AliHLTLogging.cxx:299
 AliHLTLogging.cxx:300
 AliHLTLogging.cxx:301
 AliHLTLogging.cxx:302
 AliHLTLogging.cxx:303
 AliHLTLogging.cxx:304
 AliHLTLogging.cxx:305
 AliHLTLogging.cxx:306
 AliHLTLogging.cxx:307
 AliHLTLogging.cxx:308
 AliHLTLogging.cxx:309
 AliHLTLogging.cxx:310
 AliHLTLogging.cxx:311
 AliHLTLogging.cxx:312
 AliHLTLogging.cxx:313
 AliHLTLogging.cxx:314
 AliHLTLogging.cxx:315
 AliHLTLogging.cxx:316
 AliHLTLogging.cxx:317
 AliHLTLogging.cxx:318
 AliHLTLogging.cxx:319
 AliHLTLogging.cxx:320
 AliHLTLogging.cxx:321
 AliHLTLogging.cxx:322
 AliHLTLogging.cxx:323
 AliHLTLogging.cxx:324
 AliHLTLogging.cxx:325
 AliHLTLogging.cxx:326
 AliHLTLogging.cxx:327
 AliHLTLogging.cxx:328
 AliHLTLogging.cxx:329
 AliHLTLogging.cxx:330
 AliHLTLogging.cxx:331
 AliHLTLogging.cxx:332
 AliHLTLogging.cxx:333
 AliHLTLogging.cxx:334
 AliHLTLogging.cxx:335
 AliHLTLogging.cxx:336
 AliHLTLogging.cxx:337
 AliHLTLogging.cxx:338
 AliHLTLogging.cxx:339
 AliHLTLogging.cxx:340
 AliHLTLogging.cxx:341
 AliHLTLogging.cxx:342
 AliHLTLogging.cxx:343
 AliHLTLogging.cxx:344
 AliHLTLogging.cxx:345
 AliHLTLogging.cxx:346
 AliHLTLogging.cxx:347
 AliHLTLogging.cxx:348
 AliHLTLogging.cxx:349
 AliHLTLogging.cxx:350
 AliHLTLogging.cxx:351
 AliHLTLogging.cxx:352
 AliHLTLogging.cxx:353
 AliHLTLogging.cxx:354
 AliHLTLogging.cxx:355
 AliHLTLogging.cxx:356
 AliHLTLogging.cxx:357
 AliHLTLogging.cxx:358
 AliHLTLogging.cxx:359
 AliHLTLogging.cxx:360
 AliHLTLogging.cxx:361
 AliHLTLogging.cxx:362
 AliHLTLogging.cxx:363
 AliHLTLogging.cxx:364
 AliHLTLogging.cxx:365
 AliHLTLogging.cxx:366
 AliHLTLogging.cxx:367
 AliHLTLogging.cxx:368
 AliHLTLogging.cxx:369
 AliHLTLogging.cxx:370
 AliHLTLogging.cxx:371
 AliHLTLogging.cxx:372
 AliHLTLogging.cxx:373
 AliHLTLogging.cxx:374
 AliHLTLogging.cxx:375
 AliHLTLogging.cxx:376
 AliHLTLogging.cxx:377
 AliHLTLogging.cxx:378
 AliHLTLogging.cxx:379
 AliHLTLogging.cxx:380
 AliHLTLogging.cxx:381
 AliHLTLogging.cxx:382
 AliHLTLogging.cxx:383
 AliHLTLogging.cxx:384
 AliHLTLogging.cxx:385
 AliHLTLogging.cxx:386
 AliHLTLogging.cxx:387
 AliHLTLogging.cxx:388
 AliHLTLogging.cxx:389
 AliHLTLogging.cxx:390
 AliHLTLogging.cxx:391
 AliHLTLogging.cxx:392
 AliHLTLogging.cxx:393
 AliHLTLogging.cxx:394
 AliHLTLogging.cxx:395
 AliHLTLogging.cxx:396
 AliHLTLogging.cxx:397
 AliHLTLogging.cxx:398
 AliHLTLogging.cxx:399
 AliHLTLogging.cxx:400
 AliHLTLogging.cxx:401
 AliHLTLogging.cxx:402
 AliHLTLogging.cxx:403
 AliHLTLogging.cxx:404
 AliHLTLogging.cxx:405
 AliHLTLogging.cxx:406
 AliHLTLogging.cxx:407
 AliHLTLogging.cxx:408
 AliHLTLogging.cxx:409
 AliHLTLogging.cxx:410
 AliHLTLogging.cxx:411
 AliHLTLogging.cxx:412
 AliHLTLogging.cxx:413
 AliHLTLogging.cxx:414
 AliHLTLogging.cxx:415
 AliHLTLogging.cxx:416
 AliHLTLogging.cxx:417
 AliHLTLogging.cxx:418
 AliHLTLogging.cxx:419
 AliHLTLogging.cxx:420
 AliHLTLogging.cxx:421
 AliHLTLogging.cxx:422
 AliHLTLogging.cxx:423
 AliHLTLogging.cxx:424
 AliHLTLogging.cxx:425
 AliHLTLogging.cxx:426
 AliHLTLogging.cxx:427
 AliHLTLogging.cxx:428
 AliHLTLogging.cxx:429
 AliHLTLogging.cxx:430
 AliHLTLogging.cxx:431
 AliHLTLogging.cxx:432
 AliHLTLogging.cxx:433
 AliHLTLogging.cxx:434
 AliHLTLogging.cxx:435
 AliHLTLogging.cxx:436
 AliHLTLogging.cxx:437
 AliHLTLogging.cxx:438
 AliHLTLogging.cxx:439
 AliHLTLogging.cxx:440
 AliHLTLogging.cxx:441
 AliHLTLogging.cxx:442
 AliHLTLogging.cxx:443
 AliHLTLogging.cxx:444
 AliHLTLogging.cxx:445
 AliHLTLogging.cxx:446
 AliHLTLogging.cxx:447
 AliHLTLogging.cxx:448
 AliHLTLogging.cxx:449
 AliHLTLogging.cxx:450
 AliHLTLogging.cxx:451
 AliHLTLogging.cxx:452
 AliHLTLogging.cxx:453
 AliHLTLogging.cxx:454
 AliHLTLogging.cxx:455
 AliHLTLogging.cxx:456
 AliHLTLogging.cxx:457