Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

zerolog.go 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package logger
  2. import (
  3. "github.com/9seconds/mtg/v2/mtglib"
  4. "github.com/rs/zerolog"
  5. )
  6. const loggerFieldName = "logger"
  7. type zeroLogContextVarType uint8
  8. const (
  9. zeroLogContextVarTypeUnknown zeroLogContextVarType = iota
  10. zeroLogContextVarTypeStr
  11. zeroLogContextVarTypeInt
  12. )
  13. type zeroLogContext struct {
  14. name string
  15. log *zerolog.Logger
  16. ctxVarType zeroLogContextVarType
  17. ctxVarName string
  18. ctxVarStr string
  19. ctxVarInt int
  20. parent *zeroLogContext
  21. }
  22. func (z *zeroLogContext) Named(name string) mtglib.Logger {
  23. loggerName := z.name
  24. if loggerName == "" {
  25. loggerName = name
  26. } else {
  27. loggerName += "." + name
  28. }
  29. return &zeroLogContext{
  30. name: loggerName,
  31. log: z.log,
  32. parent: z,
  33. }
  34. }
  35. func (z *zeroLogContext) BindInt(name string, value int) mtglib.Logger {
  36. return &zeroLogContext{
  37. name: z.name,
  38. log: z.log,
  39. ctxVarType: zeroLogContextVarTypeInt,
  40. ctxVarInt: value,
  41. ctxVarName: name,
  42. parent: z,
  43. }
  44. }
  45. func (z *zeroLogContext) BindStr(name, value string) mtglib.Logger {
  46. return &zeroLogContext{
  47. name: z.name,
  48. log: z.log,
  49. ctxVarType: zeroLogContextVarTypeStr,
  50. ctxVarStr: value,
  51. ctxVarName: name,
  52. parent: z,
  53. }
  54. }
  55. func (z *zeroLogContext) Info(msg string) {
  56. z.InfoError(msg, nil)
  57. }
  58. func (z *zeroLogContext) Warning(msg string) {
  59. z.WarningError(msg, nil)
  60. }
  61. func (z *zeroLogContext) Debug(msg string) {
  62. z.DebugError(msg, nil)
  63. }
  64. func (z *zeroLogContext) InfoError(msg string, err error) {
  65. z.emitLog(z.log.Info(), msg, err)
  66. }
  67. func (z *zeroLogContext) WarningError(msg string, err error) {
  68. z.emitLog(z.log.Warn(), msg, err)
  69. }
  70. func (z *zeroLogContext) DebugError(msg string, err error) {
  71. z.emitLog(z.log.Debug(), msg, err)
  72. }
  73. func (z *zeroLogContext) emitLog(evt *zerolog.Event, msg string, err error) {
  74. z.attachCtx(evt)
  75. for current := z.parent; current != nil; current = current.parent {
  76. current.attachCtx(evt)
  77. }
  78. evt.Str(loggerFieldName, z.name).Err(err).Msg(msg)
  79. }
  80. func (z *zeroLogContext) attachCtx(evt *zerolog.Event) {
  81. switch z.ctxVarType {
  82. case zeroLogContextVarTypeStr:
  83. evt.Str(z.ctxVarName, z.ctxVarStr)
  84. case zeroLogContextVarTypeInt:
  85. evt.Int(z.ctxVarName, z.ctxVarInt)
  86. case zeroLogContextVarTypeUnknown:
  87. }
  88. }
  89. func NewZeroLogger(log zerolog.Logger) mtglib.Logger {
  90. return &zeroLogContext{
  91. log: &log,
  92. }
  93. }