高热共公日志库
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.

80 lines
1.9 KiB

  1. package alils
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/aliyun/aliyun-log-go-sdk/producer"
  6. "golib.gaore.com/GaoreGo/grlogs/logs"
  7. "time"
  8. )
  9. func NewAliLS() logs.Logger {
  10. cw := &alilsLogger{
  11. Level: logs.LevelDebug,
  12. }
  13. return cw
  14. }
  15. type alilsLogger struct {
  16. producer *producer.Producer
  17. callback *Callback
  18. Project string `json:"project"`
  19. Endpoint string `json:"endpoint"`
  20. KeyID string `json:"key_id"`
  21. KeySecret string `json:"key_secret"`
  22. LogStore string `json:"log_store"`
  23. Topics []string `json:"topics"`
  24. Source string `json:"source"`
  25. Level int `json:"level"`
  26. FlushWhen int `json:"flush_when"`
  27. }
  28. func (a *alilsLogger) Init(jsonconfig string) error {
  29. err := json.Unmarshal([]byte(jsonconfig), a)
  30. if err != nil {
  31. return err
  32. }
  33. producerConfig := producer.GetDefaultProducerConfig()
  34. producerConfig.Endpoint = a.Endpoint
  35. producerConfig.AccessKeyID = a.KeyID
  36. producerConfig.AccessKeySecret = a.KeySecret
  37. producerConfig.LingerMs = 100
  38. a.producer = producer.InitProducer(producerConfig)
  39. a.callback = &Callback{}
  40. a.producer.Start()
  41. return nil
  42. }
  43. func (a *alilsLogger) WriteMsg(when time.Time, msg string, level int, lable string, env string) error {
  44. vals := map[string]string{"msg": msg, "level": fmt.Sprintf("%d", level)}
  45. vals["level_string"] = logs.GetLevelString(level)
  46. vals["env"] = env
  47. vals["lable"] = lable
  48. vals["hostname"] = GetHostname()
  49. vals["working_idr"] = Getwd()
  50. vals["home_dir"] = GetUserHomename()
  51. vals["hardware_addr"] = GetCurrentInterfaceHardwareAddr()
  52. vals["client_addrs"] = GetCurrentInterfaceAddrs()
  53. log := producer.GenerateLog(uint32(when.Unix()), vals)
  54. err := a.producer.SendLog(a.Project, a.LogStore, "topic", "127.0.0.1", log)
  55. return err
  56. }
  57. func (a *alilsLogger) Destroy() {
  58. a.producer.Close(60)
  59. a.producer.SafeClose()
  60. }
  61. func (a *alilsLogger) Flush() {
  62. }
  63. func init() {
  64. logs.Register(logs.AdapterAliLS, NewAliLS)
  65. }