log_mgr.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "precompile.h"
  2. #include "memutil.h"
  3. #include "log_mgr.h"
  4. int logmgr_create(logmgr_t **p_mgr)
  5. {
  6. logmgr_t *mgr;
  7. mgr = MALLOC_T(logmgr_t);
  8. INIT_LIST_HEAD(&mgr->factory_list);
  9. mgr->log_table = stringmap_create(-1);
  10. *p_mgr = mgr;
  11. return 0;
  12. }
  13. void logmgr_destroy(logmgr_t *mgr)
  14. {
  15. if (mgr) {
  16. int rc;
  17. stringmap_iterator *it = stringmap_default_iterator(mgr->log_table);
  18. rc = stringmap_iterator_next(it);
  19. while (rc == 0) {
  20. const char *key = stringmap_iterator_get_key(it);
  21. logbase_t *log = stringmap_iterator_get_value(it);
  22. rc = stringmap_iterator_next(it);
  23. stringmap_remove(mgr->log_table, key);
  24. logfactory_term_log(log->factory, log);
  25. logfactory_destroy_log(log->factory, log);
  26. }
  27. stringmap_destroy(mgr->log_table);
  28. {
  29. logfactory_t *pos, *n;
  30. list_for_each_entry_safe(pos, n, &mgr->factory_list, logfactory_t, entry) {
  31. list_del(&pos->entry);
  32. logfactory_destroy(pos);
  33. }
  34. }
  35. free(mgr);
  36. }
  37. }
  38. int logmgr_register_factory(logmgr_t *mgr, logfactory_t *fac)\
  39. {
  40. if (!mgr || !fac)
  41. return -1;
  42. list_add_tail(&fac->entry, &mgr->factory_list);
  43. return 0;
  44. }
  45. int logmgr_unregister_factory(logmgr_t *mgr, logfactory_t *fac)
  46. {
  47. if (!mgr || !fac)
  48. return -1;
  49. list_del(&fac->entry);
  50. return 0;
  51. }
  52. logfactory_t* logmgr_get_factory(logmgr_t *mgr, const char *name)
  53. {
  54. if (mgr && name) {
  55. logfactory_t *pos;
  56. list_for_each_entry(pos, &mgr->factory_list, logfactory_t, entry) {
  57. if (strcmp(name, pos->name) == 0)
  58. return pos;
  59. }
  60. }
  61. return NULL;
  62. }
  63. int logmgr_create_log(logmgr_t *mgr,
  64. const char *factory_name,
  65. const char *inst,
  66. logbase_t **p_log)
  67. {
  68. logfactory_t *factory = logmgr_get_factory(mgr, factory_name);
  69. if (factory) {
  70. logbase_t *log;
  71. if (stringmap_find(mgr->log_table, inst) == NULL) {
  72. log = logfactory_create_log(factory, inst);
  73. if (log) {
  74. stringmap_add(mgr->log_table, inst, log);
  75. *p_log = log;
  76. return 0;
  77. }
  78. }
  79. }
  80. return -1;
  81. }
  82. int logmgr_set_param(logmgr_t *mgr,
  83. logbase_t *log,
  84. const char *key,
  85. const char *value)
  86. {
  87. logfactory_t *factory = log->factory;
  88. return logfactory_set_log_param(factory, log, key, value);
  89. }
  90. int logmgr_init_log(logmgr_t *mgr, logbase_t *log)
  91. {
  92. logfactory_t *factory = log->factory;
  93. return logfactory_init_log(factory, log);
  94. }
  95. int logmgr_term_log(logmgr_t *mgr, logbase_t *log)
  96. {
  97. logfactory_t *factory = log->factory;
  98. return logfactory_term_log(factory, log);
  99. }
  100. void logmgr_destroy_log(logmgr_t *mgr, logbase_t *log)
  101. {
  102. logfactory_t *factory = log->factory;
  103. stringmap_remove(mgr->log_table, log->inst_name);
  104. logfactory_destroy_log(factory, log);
  105. }
  106. logbase_t *logmgr_find_log(logmgr_t *mgr, const char *inst)
  107. {
  108. stringmap_kv_pair *kvp = stringmap_find(mgr->log_table, inst);
  109. if (kvp) {
  110. return (logbase_t*)(stringmap_kv_pair_get_value(kvp));
  111. }
  112. return NULL;
  113. }