hiedabke_alisls.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package hiedabke_alisls
  2. import (
  3. "git.swzry.com/zry/GoHiedaLogger/hiedalog"
  4. "github.com/aliyun/aliyun-log-go-sdk/producer"
  5. "strconv"
  6. "time"
  7. )
  8. type HiedaBackendAliSLS struct {
  9. prod *producer.Producer
  10. proj string
  11. logstore string
  12. topic string
  13. hostname string
  14. appname string
  15. srcip string
  16. }
  17. func (b *HiedaBackendAliSLS) EmitStringLog(module string, level hiedalog.HiedaLogLevel, content string) {
  18. e := b.generateStringLogEntity(module, level, content)
  19. b.emitLogToSLS(e)
  20. }
  21. func (b *HiedaBackendAliSLS) EmitComplexLog(module string, level hiedalog.HiedaLogLevel, data map[string]string) {
  22. e := b.generateComplexLogEntity(module, level, data)
  23. b.emitLogToSLS(e)
  24. }
  25. func (l *HiedaBackendAliSLS) generateStringLogEntity(module string, level hiedalog.HiedaLogLevel, logcontent string) map[string]string {
  26. return map[string]string{
  27. "hostname": l.hostname,
  28. "app": l.appname,
  29. "module": module,
  30. "level_id": strconv.Itoa(int(level.LevelNumber)),
  31. "level": level.Name,
  32. "content": logcontent,
  33. }
  34. }
  35. func (l *HiedaBackendAliSLS) generateComplexLogEntity(module string, level hiedalog.HiedaLogLevel, data map[string]string) map[string]string {
  36. m := map[string]string{
  37. "hostname": l.hostname,
  38. "app": l.appname,
  39. "module": module,
  40. "level_id": strconv.Itoa(int(level.LevelNumber)),
  41. "level": level.Name,
  42. }
  43. for k, v := range data {
  44. m[k] = v
  45. }
  46. return m
  47. }
  48. func (l *HiedaBackendAliSLS) emitLogToSLS(entity map[string]string) {
  49. log := producer.GenerateLog(uint32(time.Now().Unix()), entity)
  50. _ = l.prod.SendLog(l.proj, l.logstore, l.topic, l.srcip, log)
  51. }
  52. func (l *HiedaBackendAliSLS) StartProducer() {
  53. l.prod.Start()
  54. }
  55. func (l *HiedaBackendAliSLS) StopProducer(timeout_ms int64) error {
  56. return l.prod.Close(timeout_ms)
  57. }
  58. func (l *HiedaBackendAliSLS) SafeStopProducer() {
  59. l.prod.SafeClose()
  60. }