Changeset 4622
- Timestamp:
- 11/11/08 11:52:37 (2 months ago)
- Files:
-
- trunk/src/charon/bus/bus.c (modified) (1 diff)
- trunk/src/charon/bus/bus.h (modified) (1 diff)
- trunk/src/charon/bus/listeners/file_logger.c (modified) (1 diff)
- trunk/src/charon/daemon.c (modified) (4 diffs)
- trunk/src/charon/daemon.h (modified) (2 diffs)
- trunk/src/charon/plugins/stroke/stroke_socket.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/charon/bus/bus.c
r4531 r4622 37 37 ); 38 38 39 ENUM(debug_lower_names, DBG_DMN, DBG_LIB, 40 "dmn", 41 "mgr", 42 "ike", 43 "chd", 44 "job", 45 "cfg", 46 "knl", 47 "net", 48 "enc", 49 "lib", 50 ); 51 39 52 typedef struct private_bus_t private_bus_t; 40 53 trunk/src/charon/bus/bus.h
r4531 r4622 71 71 72 72 /** 73 * short names of debug message group, lower case. 74 */ 75 extern enum_name_t *debug_lower_names; 76 77 /** 73 78 * Debug levels used to control output verbosity. 74 79 */ trunk/src/charon/bus/listeners/file_logger.c
r4484 r4622 99 99 static void destroy(private_file_logger_t *this) 100 100 { 101 if (this->out != stdout && this->out != stderr) 102 { 103 fclose(this->out); 104 } 101 105 free(this); 102 106 } trunk/src/charon/daemon.c
r4585 r4622 206 206 dbg = dbg_stderr; 207 207 DESTROY_IF(this->public.bus); 208 DESTROY_IF(this->public.outlog); 209 DESTROY_IF(this->public.syslog); 210 DESTROY_IF(this->public.authlog); 208 this->public.file_loggers->destroy_offset(this->public.file_loggers, 209 offsetof(file_logger_t, destroy)); 210 this->public.sys_loggers->destroy_offset(this->public.sys_loggers, 211 offsetof(sys_logger_t, destroy)); 211 212 free(this); 212 213 } … … 329 330 330 331 /** 332 * Initialize logging 333 */ 334 static void initialize_loggers(private_daemon_t *this, bool use_stderr, 335 level_t levels[]) 336 { 337 sys_logger_t *sys_logger; 338 file_logger_t *file_logger; 339 enumerator_t *enumerator; 340 char *facility, *filename; 341 int loggers_defined = 0; 342 debug_t group; 343 level_t def; 344 bool append; 345 FILE *file; 346 347 /* setup sysloggers */ 348 enumerator = lib->settings->create_section_enumerator(lib->settings, 349 "charon.syslog"); 350 while (enumerator->enumerate(enumerator, &facility)) 351 { 352 loggers_defined++; 353 if (streq(facility, "daemon")) 354 { 355 sys_logger = sys_logger_create(LOG_DAEMON); 356 } 357 else if (streq(facility, "auth")) 358 { 359 sys_logger = sys_logger_create(LOG_AUTHPRIV); 360 } 361 else 362 { 363 continue; 364 } 365 def = lib->settings->get_int(lib->settings, 366 "charon.syslog.%s.default", 1, facility); 367 for (group = 0; group < DBG_MAX; group++) 368 { 369 sys_logger->set_level(sys_logger, group, 370 lib->settings->get_int(lib->settings, 371 "charon.syslog.%s.%N", def, 372 facility, debug_lower_names, group)); 373 } 374 this->public.sys_loggers->insert_last(this->public.sys_loggers, 375 sys_logger); 376 this->public.bus->add_listener(this->public.bus, &sys_logger->listener); 377 } 378 enumerator->destroy(enumerator); 379 380 /* and file loggers */ 381 enumerator = lib->settings->create_section_enumerator(lib->settings, 382 "charon.filelog"); 383 while (enumerator->enumerate(enumerator, &filename)) 384 { 385 loggers_defined++; 386 if (streq(filename, "stderr")) 387 { 388 file = stderr; 389 } 390 else if (streq(filename, "stdout")) 391 { 392 file = stdout; 393 } 394 else 395 { 396 append = lib->settings->get_bool(lib->settings, 397 "charon.filelog.%s.append", TRUE, filename); 398 file = fopen(filename, append ? "a" : "w"); 399 if (file == NULL) 400 { 401 DBG1(DBG_DMN, "opening file %s for logging failed: %s", 402 filename, strerror(errno)); 403 continue; 404 } 405 } 406 file_logger = file_logger_create(file); 407 def = lib->settings->get_int(lib->settings, 408 "charon.filelog.%s.default", 1, filename); 409 for (group = 0; group < DBG_MAX; group++) 410 { 411 file_logger->set_level(file_logger, group, 412 lib->settings->get_int(lib->settings, 413 "charon.filelog.%s.%N", def, 414 filename, debug_lower_names, group)); 415 } 416 this->public.file_loggers->insert_last(this->public.file_loggers, 417 file_logger); 418 this->public.bus->add_listener(this->public.bus, &file_logger->listener); 419 420 } 421 enumerator->destroy(enumerator); 422 423 /* setup legacy style default loggers provided via command-line */ 424 if (!loggers_defined) 425 { 426 file_logger = file_logger_create(stdout); 427 sys_logger = sys_logger_create(LOG_DAEMON); 428 this->public.bus->add_listener(this->public.bus, &file_logger->listener); 429 this->public.bus->add_listener(this->public.bus, &sys_logger->listener); 430 this->public.file_loggers->insert_last(this->public.file_loggers, 431 file_logger); 432 this->public.sys_loggers->insert_last(this->public.sys_loggers, 433 sys_logger); 434 for (group = 0; group < DBG_MAX; group++) 435 { 436 sys_logger->set_level(sys_logger, group, levels[group]); 437 if (use_stderr) 438 { 439 file_logger->set_level(file_logger, group, levels[group]); 440 } 441 } 442 } 443 } 444 445 /** 331 446 * Initialize the daemon 332 447 */ 333 448 static bool initialize(private_daemon_t *this, bool syslog, level_t levels[]) 334 449 { 335 debug_t group;336 337 450 /* for uncritical pseudo random numbers */ 338 451 srandom(time(NULL) + getpid()); … … 340 453 /* setup bus and it's listeners first to enable log output */ 341 454 this->public.bus = bus_create(); 342 this->public.outlog = file_logger_create(stdout);343 this->public.syslog = sys_logger_create(LOG_DAEMON);344 this->public.authlog = sys_logger_create(LOG_AUTHPRIV);345 this->public.bus->add_listener(this->public.bus, &this->public.syslog->listener);346 this->public.bus->add_listener(this->public.bus, &this->public.outlog->listener);347 this->public.bus->add_listener(this->public.bus, &this->public.authlog->listener);348 this->public.authlog->set_level(this->public.authlog, DBG_ANY, LEVEL_AUDIT);349 455 /* set up hook to log dbg message in library via charons message bus */ 350 456 dbg = dbg_bus; 351 457 352 /* apply loglevels */ 353 for (group = 0; group < DBG_MAX; group++) 354 { 355 this->public.syslog->set_level(this->public.syslog, 356 group, levels[group]); 357 if (!syslog) 358 { 359 this->public.outlog->set_level(this->public.outlog, 360 group, levels[group]); 361 } 362 } 458 initialize_loggers(this, !syslog, levels); 363 459 364 460 DBG1(DBG_DMN, "starting charon (strongSwan Version %s)", VERSION); … … 465 561 this->public.sim = NULL; 466 562 this->public.bus = NULL; 467 this->public.outlog = NULL; 468 this->public.syslog = NULL; 469 this->public.authlog = NULL; 563 this->public.file_loggers = linked_list_create(); 564 this->public.sys_loggers = linked_list_create(); 470 565 #ifdef ME 471 566 this->public.connect_manager = NULL; trunk/src/charon/daemon.h
r4406 r4622 218 218 219 219 /** 220 * Manager IKEv2 cfg payload attributes220 * Manager for IKEv2 cfg payload attributes 221 221 */ 222 222 attribute_manager_t *attributes; … … 253 253 254 254 /** 255 * A bus listener logging to stdout 256 */ 257 file_logger_t *outlog; 258 259 /** 260 * A bus listener logging to syslog 261 */ 262 sys_logger_t *syslog; 263 264 /** 265 * A bus listener logging most important events 266 */ 267 sys_logger_t *authlog; 255 * A list of installed file_logger_t's 256 */ 257 linked_list_t *file_loggers; 258 259 /** 260 * A list of installed sys_logger_t's 261 */ 262 linked_list_t *sys_loggers; 268 263 269 264 /** trunk/src/charon/plugins/stroke/stroke_socket.c
r4576 r4622 359 359 stroke_msg_t *msg, FILE *out) 360 360 { 361 enumerator_t *enumerator; 362 sys_logger_t *sys_logger; 363 file_logger_t *file_logger; 361 364 debug_t group; 362 365 … … 371 374 return; 372 375 } 373 374 charon->outlog->set_level(charon->outlog, group, msg->loglevel.level); 375 charon->syslog->set_level(charon->syslog, group, msg->loglevel.level); 376 /* we set the loglevel on ALL sys- and file-loggers */ 377 enumerator = charon->sys_loggers->create_enumerator(charon->sys_loggers); 378 while (enumerator->enumerate(enumerator, &sys_logger)) 379 { 380 sys_logger->set_level(sys_logger, group, msg->loglevel.level); 381 } 382 enumerator->destroy(enumerator); 383 enumerator = charon->file_loggers->create_enumerator(charon->file_loggers); 384 while (enumerator->enumerate(enumerator, &file_logger)) 385 { 386 file_logger->set_level(file_logger, group, msg->loglevel.level); 387 } 388 enumerator->destroy(enumerator); 376 389 } 377 390
