高热共公日志库
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

139 rindas
2.9 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. lock sync.RWMutex
  14. }
  15. func (self *Logger) SetAdapter(level Level, adapter Adapter) *Logger {
  16. if call, ok := adatperSetMapper[adapter]; ok {
  17. if err := call(self, level); err != nil {
  18. fmt.Println(err)
  19. }
  20. }
  21. return self
  22. }
  23. func (self *Logger) DropAdapter(adapter Adapter) *Logger {
  24. if call, ok := adatperDropMapper[adapter]; ok {
  25. if err := call(self); err != nil {
  26. fmt.Println(err)
  27. }
  28. }
  29. return self
  30. }
  31. func newLogger(label string, channelLens ...int64) (l *Logger, loaded bool) {
  32. var channellens int64
  33. var tmp interface{}
  34. if len(channelLens) > 0 {
  35. channellens = channelLens[0]
  36. }
  37. tmp, loaded = loggers.LoadOrStore(label, func() *Logger {
  38. l := &Logger{BeeLogger: logs.NewLogger(channellens)}
  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. return l
  47. }())
  48. l = tmp.(*Logger)
  49. return
  50. }
  51. func New(label string, channelLens ...int64) (l *Logger, loaded bool) {
  52. return newLogger(label, channelLens...)
  53. }
  54. func Get(label string, channelLens ...int64) (l *Logger) {
  55. var filelevel Level = LevelInfo
  56. var loaded bool
  57. if os.Getenv(envkey) == "dev" {
  58. filelevel = LevelAll
  59. }
  60. if l, loaded = New(label, channelLens...); !loaded {
  61. l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole)
  62. }
  63. return
  64. }
  65. func GetEs(label string, channelLens ...int64) (l *Logger) {
  66. var filelevel Level = LevelInfo
  67. var loaded bool
  68. if os.Getenv(envkey) == "dev" {
  69. filelevel = LevelAll
  70. }
  71. if l, loaded = New(label, channelLens...); !loaded {
  72. l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterElasticSearch)
  73. l.lock.Unlock()
  74. }
  75. return
  76. }
  77. func GetAli(label string, channelLens ...int64) (l *Logger) {
  78. var filelevel Level = LevelInfo
  79. var loaded bool
  80. if os.Getenv(envkey) == "dev" {
  81. filelevel = LevelAll
  82. }
  83. if l, loaded = New(label, channelLens...); !loaded {
  84. l.SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterFile).SetAdapter(filelevel, AdapterAliLs)
  85. }
  86. return
  87. }
  88. func Close(lables ...string) {
  89. wg := &sync.WaitGroup{}
  90. for _, lable := range lables {
  91. wg.Add(1)
  92. go func() {
  93. if v, ok := loggers.Load(lable); ok {
  94. if tmp, ok := v.(*Logger); ok {
  95. loggers.Delete(lable)
  96. tmp.BeeLogger.Close()
  97. }
  98. }
  99. wg.Done()
  100. }()
  101. }
  102. wg.Wait()
  103. }
  104. func CloseAll() {
  105. wg := &sync.WaitGroup{}
  106. loggers.Range(func(key, value interface{}) bool {
  107. wg.Add(1)
  108. go func() {
  109. if tmp, ok := value.(*Logger); ok {
  110. tmp.BeeLogger.Close()
  111. loggers.Delete(key)
  112. }
  113. wg.Done()
  114. }()
  115. return true
  116. })
  117. wg.Wait()
  118. }