高热共公日志库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
2.6 KiB

  1. package grlogs
  2. import (
  3. "fmt"
  4. "golib.gaore.com/GaoreGo/grlogs/logs"
  5. "os"
  6. "sync"
  7. )
  8. var loggers = sync.Map{}
  9. var envkey = "CENTER_RUNMODE"
  10. type Logger struct {
  11. Lable string
  12. *logs.BeeLogger
  13. }
  14. func (self *Logger) SetAdapter(level Level, adapter Adapter) *Logger {
  15. if call, ok := adatperSetMapper[adapter]; ok {
  16. if err := call(self, level); err != nil {
  17. fmt.Println(err)
  18. }
  19. }
  20. return self
  21. }
  22. func (self *Logger) DropAdapter(adapter Adapter) *Logger {
  23. if call, ok := adatperDropMapper[adapter]; ok {
  24. if err := call(self); err != nil {
  25. fmt.Println(err)
  26. }
  27. }
  28. return self
  29. }
  30. func New(label string, channelLens ...int64) (l *Logger, loaded bool) {
  31. var channellens int64
  32. var tmp interface{}
  33. tmp, loaded = loggers.LoadOrStore(label, new(Logger))
  34. l = tmp.(*Logger)
  35. if len(channelLens) > 0 {
  36. channellens = channelLens[0]
  37. }
  38. if !loaded {
  39. l.Lable = label
  40. l.BeeLogger = logs.NewLogger(channellens)
  41. l.BeeLogger.Lable = label
  42. l.Env = os.Getenv(envkey)
  43. l.SetPrefix(fmt.Sprintf("[env:%s logger:%s]", os.Getenv(envkey), label))
  44. l.EnableFuncCallDepth(true)
  45. l.SetLogFuncCallDepth(2)
  46. }
  47. return
  48. }
  49. func Get(label string, channelLens ...int64) (l *Logger) {
  50. var filelevel Level = LevelInfo
  51. var loaded bool
  52. if os.Getenv(envkey) == "dev" {
  53. filelevel = LevelAll
  54. }
  55. if l, loaded = New(label, channelLens...); !loaded {
  56. l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole)
  57. }
  58. return
  59. }
  60. func GetEs(label string, channelLens ...int64) (l *Logger) {
  61. var filelevel Level = LevelInfo
  62. var loaded bool
  63. if os.Getenv(envkey) == "dev" {
  64. filelevel = LevelAll
  65. }
  66. if l, loaded = New(label, channelLens...); !loaded {
  67. l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterElasticSearch)
  68. }
  69. return
  70. }
  71. func GetAli(label string, channelLens ...int64) (l *Logger) {
  72. var filelevel Level = LevelInfo
  73. var loaded bool
  74. if os.Getenv(envkey) == "dev" {
  75. filelevel = LevelAll
  76. }
  77. if l, loaded = New(label, channelLens...); !loaded {
  78. l.SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterFile).SetAdapter(filelevel, AdapterAliLs)
  79. }
  80. return
  81. }
  82. func Close(lables ...string) {
  83. wg := &sync.WaitGroup{}
  84. for _, lable := range lables {
  85. wg.Add(1)
  86. go func() {
  87. if v, ok := loggers.Load(lable); ok {
  88. if tmp, ok := v.(*Logger); ok {
  89. loggers.Delete(lable)
  90. tmp.BeeLogger.Close()
  91. }
  92. }
  93. wg.Done()
  94. }()
  95. }
  96. wg.Wait()
  97. }
  98. func CloseAll() {
  99. wg := &sync.WaitGroup{}
  100. loggers.Range(func(key, value interface{}) bool {
  101. wg.Add(1)
  102. go func() {
  103. if tmp, ok := value.(*Logger); ok {
  104. tmp.BeeLogger.Close()
  105. loggers.Delete(key)
  106. }
  107. wg.Done()
  108. }()
  109. return true
  110. })
  111. wg.Wait()
  112. }