View | Details | Raw Unified | Return to bug 1082
Collapse All | Expand All

(-)log.cc (-2 / +112 lines)
 Lines 253-271    Link Here 
253
253
254
254
255
void 
255
void 
256
256
LogComponentEnable (char const *name, enum LogLevel level)
257
LogComponentEnable (char const *name, enum LogLevel level)
257
{
258
{
258
  ComponentList *components = GetComponentList ();
259
  ComponentList *components = GetComponentList ();
259
  for (ComponentListI i = components->begin ();
260
  ComponentListI i;
261
  for ( i = components->begin ();
260
       i != components->end ();
262
       i != components->end ();
261
       i++)
263
       i++)
262
    {
264
    {
263
      if (i->first.compare (name) == 0) 
265
      if (i->first.compare (name) == 0) 
264
        {
266
        {
265
          i->second->Enable (level);
267
          i->second->Enable (level);
266
          break;
268
          return;
267
        }
269
        }
268
    }
270
    }
271
    if(i == components->end()) {
272
	// nothing matched
273
      std::string ComponentName(name); 
274
      std::string errorMessage = "Logging component \""+ComponentName+"\" not found. See above for a list of available log components";
275
      LogComponentPrintList();
276
      NS_FATAL_ERROR (errorMessage.c_str());
277
    }
269
}
278
}
270
279
271
void 
280
void 
 Lines 354-362    Link Here 
354
    }
363
    }
355
}
364
}
356
365
366
static bool ComponentExists(std::string componentName) 
367
{
368
  char const*name=componentName.c_str();
369
  ComponentList *components = GetComponentList ();
370
  ComponentListI i;
371
  for ( i = components->begin ();
372
        i != components->end ();
373
        i++)
374
     {
375
       if (i->first.compare (name) == 0) 
376
 	{
377
	  return true;
378
 	}
379
    }
380
  if(i == components->end()) {	// nothing matched 
381
	return false;    
382
   }
383
  else {
384
    NS_ASSERT(1==0);			// the control should never reach here. 
385
  }
386
}
387
388
static void checkEnvironmentVariables() {
389
#ifdef HAVE_GETENV
390
  char *envVar = getenv ("NS_LOG");
391
  if (envVar == 0)
392
    {
393
      return;
394
    }
395
  std::string env = envVar;
396
397
  std::string::size_type cur = 0;
398
  std::string::size_type next = 0;
399
  
400
  while (next != std::string::npos)
401
    {
402
      next = env.find_first_of (":", cur);
403
      std::string tmp = std::string (env, cur, next-cur);
404
      std::string::size_type equal = tmp.find ("=");
405
      std::string component;
406
      if (equal == std::string::npos)		// ie no '=' characters found 
407
        {
408
          component = tmp;
409
          if (ComponentExists(component) || component == "*")
410
            {
411
              return;
412
            }
413
	  else {
414
	      LogComponentPrintList();
415
              std::string errorMessage="Invalid or unregistered component name \""+component+"\" in env variable NS_LOG, see above for a list of valid components";
416
	      NS_FATAL_ERROR(errorMessage.c_str());
417
	  }
418
        }
419
      else
420
        {
421
          component = tmp.substr (0, equal);
422
          if (ComponentExists(component) || component == "*")
423
            {
424
              std::string::size_type cur_lev;
425
              std::string::size_type next_lev = equal;
426
              do
427
                {
428
                  cur_lev = next_lev + 1;
429
                  next_lev = tmp.find ("|", cur_lev);
430
                  std::string lev = tmp.substr (cur_lev, next_lev - cur_lev);
431
                  if (    (lev == "error")
432
		      ||  (lev == "warn")
433
                      || (lev == "debug")
434
                      || (lev == "info")
435
                      || (lev == "function")
436
                      || (lev == "logic")
437
                      || (lev == "all")
438
                      || (lev == "prefix_func")
439
                      || (lev == "prefix_time")
440
                      || (lev == "prefix_node")
441
                      || (lev == "level_error")
442
                      || (lev == "level_warn")
443
                      || (lev == "level_debug")
444
                      || (lev == "level_info")
445
                      || (lev == "level_function")
446
                      || (lev == "level_logic")
447
                      || (lev == "level_all")
448
		     ) continue;
449
		  else {
450
 			std::string errorMessage="Invalid log level \""+lev+"\" in env variable NS_LOG for component name " + component;
451
			NS_FATAL_ERROR(errorMessage.c_str());	
452
		  }
453
                } while (next_lev != std::string::npos);
454
            }
455
	    else 
456
	     {
457
	      LogComponentPrintList();
458
	      std::string errorMessage="Invalid or unregistered component name \""+component+"\" in env variable NS_LOG, see above for a list of valid components";
459
	      NS_FATAL_ERROR(errorMessage.c_str());
460
	    }
461
        }
462
      cur = next + 1;	// parse next component
463
    }
464
#endif
465
}
357
void LogSetTimePrinter (LogTimePrinter printer)
466
void LogSetTimePrinter (LogTimePrinter printer)
358
{
467
{
359
  g_logTimePrinter = printer;
468
  g_logTimePrinter = printer;
469
  checkEnvironmentVariables(); 
360
}
470
}
361
LogTimePrinter LogGetTimePrinter (void)
471
LogTimePrinter LogGetTimePrinter (void)
362
{
472
{

Return to bug 1082