log_mgr.c 2.8 KB

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