log_msg.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // package log_msg -- сообщение логгера.
  2. package log_msg
  3. import (
  4. "fmt"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
  10. )
  11. // ILogMsg -- сообщение лога.
  12. type ILogMsg interface {
  13. // CreateAt -- когда создано
  14. CreateAt() core_spec.ITime
  15. // Level -- уровень сообщения
  16. Level() *quark.QStr[quark.Mut]
  17. // Msg -- текст сообщения
  18. Msg() *quark.QStr[quark.Fix]
  19. // String -- форматированная строка
  20. String() string
  21. }
  22. const (
  23. DEBUG = -3
  24. INFO = -2
  25. WARN = -1
  26. ERROR = 0
  27. )
  28. // logMsg -- сообщение логгера.
  29. type logMsg struct {
  30. level *quark.QStr[quark.Mut]
  31. createdAt core_spec.ITime
  32. msg *quark.QStr[quark.Fix]
  33. }
  34. // NewLogMsg -- возвращает новое сообщение логгера.
  35. func NewLogMsg(level int, msg string) ILogMsg {
  36. sf := &logMsg{
  37. createdAt: etime.NewETimeAuto(),
  38. msg: quark.NewQStr(msg),
  39. }
  40. sf.check(level)
  41. return sf
  42. }
  43. // String -- возвращает форматированное сообщение лога.
  44. func (sf *logMsg) String() string {
  45. strOut := fmt.Sprintf("%v %v %v", sf.level, sf.createdAt, sf.msg)
  46. return strOut
  47. }
  48. // Msg -- возвращает хранимое сообщение.
  49. func (sf *logMsg) Msg() *quark.QStr[quark.Fix] {
  50. return sf.msg
  51. }
  52. // Level -- возвращает уровень сообщения.
  53. func (sf *logMsg) Level() *quark.QStr[quark.Mut] {
  54. return sf.level
  55. }
  56. // CreateAt -- когда сообщение создано.
  57. func (sf *logMsg) CreateAt() core_spec.ITime {
  58. return sf.createdAt
  59. }
  60. // Проверяет правильность своего состава.
  61. func (sf *logMsg) check(level int) {
  62. switch level {
  63. case DEBUG:
  64. quark_val.Set(sf.level.Val(), "DEBU")
  65. case INFO:
  66. quark_val.Set(sf.level.Val(), "INFO")
  67. case WARN:
  68. quark_val.Set(sf.level.Val(), "WARN")
  69. case ERROR:
  70. quark_val.Set(sf.level.Val(), "ERRO")
  71. default:
  72. helpers.Hassert(false, "logMsg.check(): unknown level(%v)", []any{level})
  73. }
  74. }