|
|
| 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 |
|
|
| 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 |
{ |