web_log.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // package web_log -- веб-лог компонента
  2. package web_log
  3. import (
  4. "fmt"
  5. "strings"
  6. "sync"
  7. "time"
  8. "wartank/pkg/types"
  9. )
  10. // ВебЛог -- веб-лог компонента
  11. type ВебЛог struct {
  12. лог []string // Буфер логирования
  13. еслиПеч bool
  14. блок sync.RWMutex
  15. }
  16. // НовВебЛог -- возвращает новый *ВебЛог
  17. func НовВебЛог(еслиПеч bool) types.ИВебЛог {
  18. сам := &ВебЛог{
  19. лог: []string{},
  20. еслиПеч: еслиПеч,
  21. }
  22. return сам
  23. }
  24. // ОтклВывод -- отключает вывод в консоль
  25. func (сам *ВебЛог) ОтклВывод() {
  26. сам.блок.Lock()
  27. defer сам.блок.Unlock()
  28. сам.еслиПеч = false
  29. }
  30. // Добавить -- добавляет строку в лог
  31. func (сам *ВебЛог) Добавить(сбщ string, арг ...interface{}) {
  32. сам.блок.Lock()
  33. defer сам.блок.Unlock()
  34. время := time.Now().Local().Format("2006-01-02 15:04:05.000 ")
  35. сбщ = время + fmt.Sprintf(сбщ, арг...)
  36. if сам.еслиПеч {
  37. fmt.Print(сбщ)
  38. }
  39. сам.лог = append(сам.лог, сбщ)
  40. if len(сам.лог) > 50 {
  41. сам.лог = сам.лог[50:]
  42. }
  43. }
  44. // Ошибка -- лог ошибок
  45. func (сам *ВебЛог) Ошибка() string {
  46. сам.блок.RLock()
  47. defer сам.блок.RUnlock()
  48. return strings.Join(сам.лог, "\n")
  49. }
  50. // Внимание -- лог предупреждений
  51. func (сам *ВебЛог) Внимание() string {
  52. сам.блок.RLock()
  53. defer сам.блок.RUnlock()
  54. return strings.Join(сам.лог, "\n")
  55. }
  56. // Инфо -- информационный лог
  57. func (сам *ВебЛог) Инфо() string {
  58. сам.блок.RLock()
  59. defer сам.блок.RUnlock()
  60. return strings.Join(сам.лог, "\n")
  61. }
  62. // Отладка -- возвращает весь лог компонента
  63. func (сам *ВебЛог) Отладка() string {
  64. сам.блок.RLock()
  65. defer сам.блок.RUnlock()
  66. return strings.Join(сам.лог, "\n")
  67. }