#include "precompile.h" #include "memutil.h" #include "log_mgr.h" int logmgr_create(logmgr_t **p_mgr) { logmgr_t *mgr; mgr = MALLOC_T(logmgr_t); if (mgr == NULL) { return -1; } INIT_LIST_HEAD(&mgr->factory_list); mgr->log_table = stringmap_create(-1); *p_mgr = mgr; return 0; } void logmgr_destroy(logmgr_t *mgr) { if (mgr) { int rc; stringmap_iterator *it = stringmap_default_iterator(mgr->log_table); rc = stringmap_iterator_next(it); while (rc == 0) { const char *key = stringmap_iterator_get_key(it); logbase_t *log = stringmap_iterator_get_value(it); rc = stringmap_iterator_next(it); stringmap_remove(mgr->log_table, key); logfactory_term_log(log->factory, log); logfactory_destroy_log(log->factory, log); } stringmap_destroy(mgr->log_table); { logfactory_t *pos, *n; list_for_each_entry_safe(pos, n, &mgr->factory_list, logfactory_t, entry) { list_del(&pos->entry); logfactory_destroy(pos); } } free(mgr); } } int logmgr_register_factory(logmgr_t *mgr, logfactory_t *fac)\ { if (!mgr || !fac) return -1; list_add_tail(&fac->entry, &mgr->factory_list); return 0; } int logmgr_unregister_factory(logmgr_t *mgr, logfactory_t *fac) { if (!mgr || !fac) return -1; list_del(&fac->entry); return 0; } logfactory_t* logmgr_get_factory(logmgr_t *mgr, const char *name) { if (mgr && name) { logfactory_t *pos; list_for_each_entry(pos, &mgr->factory_list, logfactory_t, entry) { if (strcmp(name, pos->name) == 0) return pos; } } return NULL; } int logmgr_create_log(logmgr_t *mgr, const char *factory_name, const char *inst, logbase_t **p_log) { logfactory_t *factory = logmgr_get_factory(mgr, factory_name); if (factory) { logbase_t *log; if (stringmap_find(mgr->log_table, inst) == NULL) { log = logfactory_create_log(factory, inst); if (log) { stringmap_add(mgr->log_table, inst, log); *p_log = log; return 0; } } } return -1; } int logmgr_set_param(logmgr_t *mgr, logbase_t *log, const char *key, const char *value) { logfactory_t *factory = log->factory; return logfactory_set_log_param(factory, log, key, value); } int logmgr_init_log(logmgr_t *mgr, logbase_t *log) { logfactory_t *factory = log->factory; return logfactory_init_log(factory, log); } int logmgr_term_log(logmgr_t *mgr, logbase_t *log) { logfactory_t *factory = log->factory; return logfactory_term_log(factory, log); } void logmgr_destroy_log(logmgr_t *mgr, logbase_t *log) { logfactory_t *factory = log->factory; stringmap_remove(mgr->log_table, log->inst_name); logfactory_destroy_log(factory, log); } logbase_t *logmgr_find_log(logmgr_t *mgr, const char *inst) { stringmap_kv_pair *kvp = stringmap_find(mgr->log_table, inst); if (kvp) { return (logbase_t*)(stringmap_kv_pair_get_value(kvp)); } return NULL; }