- logging cleanup
- pid re-replaced with thread_ids, since nptl does not distinguish pids between threads
This commit is contained in:
@@ -26,7 +26,6 @@
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "logger.h"
|
||||
|
||||
@@ -63,9 +62,9 @@ struct private_logger_t {
|
||||
FILE *output;
|
||||
|
||||
/**
|
||||
* Should a pid be included in the log?
|
||||
* Should a thread_id be included in the log?
|
||||
*/
|
||||
bool log_pid;
|
||||
bool log_thread_id;
|
||||
|
||||
/**
|
||||
* Applies a prefix to string and stores it in buffer.
|
||||
@@ -119,9 +118,9 @@ static void prepend_prefix(private_logger_t *this, logger_level_t loglevel, char
|
||||
log_details = '0';
|
||||
}
|
||||
|
||||
if (this->log_pid)
|
||||
if (this->log_thread_id)
|
||||
{
|
||||
snprintf(buffer, MAX_LOG, "[%c%c] [%s] @%d %s", log_type, log_details, this->name, getpid(), string);
|
||||
snprintf(buffer, MAX_LOG, "[%c%c] [%s] @%u %s", log_type, log_details, this->name, (int)pthread_self(), string);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -294,7 +293,7 @@ static void destroy(private_logger_t *this)
|
||||
/*
|
||||
* Described in header.
|
||||
*/
|
||||
logger_t *logger_create(char *logger_name, logger_level_t log_level, bool log_pid, FILE * output)
|
||||
logger_t *logger_create(char *logger_name, logger_level_t log_level, bool log_thread_id, FILE * output)
|
||||
{
|
||||
private_logger_t *this = allocator_alloc_thing(private_logger_t);
|
||||
|
||||
@@ -314,7 +313,7 @@ logger_t *logger_create(char *logger_name, logger_level_t log_level, bool log_pi
|
||||
|
||||
/* private variables */
|
||||
this->level = log_level;
|
||||
this->log_pid = log_pid;
|
||||
this->log_thread_id = log_thread_id;
|
||||
this->name = allocator_alloc(strlen(logger_name) + 1);
|
||||
|
||||
strcpy(this->name,logger_name);
|
||||
|
||||
@@ -110,8 +110,8 @@ struct logger_t {
|
||||
*
|
||||
* @param this logger_t object
|
||||
* @param loglevel or'ed set of loglevels
|
||||
* @param label a labeling name, logged with the bytes
|
||||
* @param bytes pointer to the bytes to dump
|
||||
* @param label a labeling name, logged with the bytes
|
||||
* @param bytes pointer to the bytes to dump
|
||||
* @param len number of bytes to dump
|
||||
*/
|
||||
void (*log_bytes) (logger_t *this, logger_level_t loglevel, char *label, char *bytes, size_t len);
|
||||
@@ -124,7 +124,7 @@ struct logger_t {
|
||||
*
|
||||
* @param this logger_t object
|
||||
* @param loglevel or'ed set of loglevels
|
||||
* @param label a labeling name, logged with the bytes
|
||||
* @param label a labeling name, logged with the bytes
|
||||
* @param chunk pointer to a chunk to log
|
||||
*/
|
||||
void (*log_chunk) (logger_t *this, logger_level_t loglevel, char *label, chunk_t *chunk);
|
||||
@@ -158,13 +158,13 @@ struct logger_t {
|
||||
*
|
||||
* @param logger_name name for the logger_t object
|
||||
* @param log_level or'ed set of log_levels to assign to the new logger_t object
|
||||
* @param log_pid TRUE if thread id should also be logged
|
||||
* @param output FILE * if log has to go on a file output, NULL for syslog
|
||||
* @param log_thread_id TRUE if thread id should also be logged
|
||||
* @param output FILE * if log has to go on a file output, NULL for syslog
|
||||
* @return logger_t object
|
||||
*
|
||||
* @ingroup utils
|
||||
*/
|
||||
logger_t *logger_create(char *logger_name, logger_level_t log_level, bool log_pid, FILE * output);
|
||||
logger_t *logger_create(char *logger_name, logger_level_t log_level, bool log_thread_id, FILE * output);
|
||||
|
||||
|
||||
#endif /*LOGGER_H_*/
|
||||
|
||||
@@ -43,6 +43,8 @@ mapping_t logger_context_t_mappings[] = {
|
||||
{DAEMON, "DAEMON"},
|
||||
{CONFIGURATION_MANAGER, "CONFIG"},
|
||||
{ENCRYPTION_PAYLOAD, "ENCPLD"},
|
||||
{PRIME_POOL, "PRIMEP"},
|
||||
{MAPPING_END, NULL},
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -137,40 +139,56 @@ static logger_t *create_logger(private_logger_manager_t *this, logger_context_t
|
||||
|
||||
/* output to stdout, since we are debugging all days */
|
||||
output = stdout;
|
||||
|
||||
/* defaults */
|
||||
log_thread_ids = FALSE;
|
||||
logger_level = this->public.get_logger_level(&(this->public),context);;
|
||||
|
||||
switch(context)
|
||||
{
|
||||
case TESTER:
|
||||
log_thread_ids = FALSE;
|
||||
output = stdout;
|
||||
logger_level |= FULL;
|
||||
break;
|
||||
case IKE_SA_MANAGER:
|
||||
log_thread_ids = TRUE;
|
||||
break;
|
||||
case IKE_SA:
|
||||
logger_level |= FULL;
|
||||
case IKE_SA_MANAGER:
|
||||
case WORKER:
|
||||
log_thread_ids = TRUE;
|
||||
break;
|
||||
case CONFIGURATION_MANAGER:
|
||||
logger_level |= ALL;
|
||||
log_thread_ids = TRUE;
|
||||
break;
|
||||
case MESSAGE:
|
||||
log_thread_ids = TRUE;
|
||||
break;
|
||||
case ENCRYPTION_PAYLOAD:
|
||||
|
||||
log_thread_ids = TRUE;
|
||||
break;
|
||||
case GENERATOR:
|
||||
case THREAD_POOL:
|
||||
case SCHEDULER:
|
||||
case SENDER:
|
||||
case RECEIVER:
|
||||
case SOCKET:
|
||||
case DAEMON:
|
||||
logger_level |= CONTROL;
|
||||
log_thread_ids = TRUE;
|
||||
break;
|
||||
case PARSER:
|
||||
log_thread_ids = FALSE;
|
||||
logger_level |= ERROR;
|
||||
log_thread_ids = TRUE;
|
||||
break;
|
||||
case WORKER:
|
||||
log_thread_ids = TRUE;
|
||||
break;
|
||||
case THREAD_POOL:
|
||||
break;
|
||||
case PRIME_POOL:
|
||||
break;
|
||||
case SCHEDULER:
|
||||
break;
|
||||
case SENDER:
|
||||
break;
|
||||
case RECEIVER:
|
||||
break;
|
||||
case SOCKET:
|
||||
break;
|
||||
case DAEMON:
|
||||
break;
|
||||
}
|
||||
|
||||
/* reduce to global definiton of loglevel */
|
||||
logger_level &= this->public.get_logger_level(&(this->public),context);
|
||||
|
||||
/* logger manager is thread save */
|
||||
pthread_mutex_lock(&(this->mutex));
|
||||
if (name != NULL)
|
||||
|
||||
@@ -50,6 +50,7 @@ enum logger_context_t {
|
||||
DAEMON,
|
||||
CONFIGURATION_MANAGER,
|
||||
ENCRYPTION_PAYLOAD,
|
||||
PRIME_POOL,
|
||||
};
|
||||
|
||||
typedef struct logger_manager_t logger_manager_t;
|
||||
|
||||
Reference in New Issue
Block a user