package service import ( "encoding/json" "fmt" "os" "runtime" "git.belvedersky.ru/common/logger/utils" "github.com/fatih/color" "github.com/gofiber/fiber/v2" ) var ( ServiceError = TypeError{Code: 2, Description: "Сервисная ошибка"} ) // Трейс ошибки для рекавера func (s *LoggerService) TraceHandler(c *fiber.Ctx, e interface{}) { buf := make([]byte, 1024) buf = buf[:runtime.Stack(buf, false)] err := fmt.Sprintf("panic: %v\n%s\n", e, buf) os.Stderr.WriteString(err) s.Error(LogErrorStruct{ Error: ServiceError, Message: err, }) c.JSON(err) } func (s *LoggerService) Errorf(f string, v ...interface{}) { s.Log.Printf("ERROR: "+f, v...) } func (s *LoggerService) Warningf(f string, v ...interface{}) { s.Log.Printf("WARNING: "+f, v...) } func (s *LoggerService) Infof(f string, v ...interface{}) { s.Log.Printf("INFO: "+f, v...) } func (s *LoggerService) Debugf(f string, v ...interface{}) { s.Log.Printf("DEBUG: "+f, v...) } // Лог дебага func (s *LoggerService) Debug(ls LogStruct) { // Если цвет не указан if ls.Color == 0 { ls.Color = color.FgWhite } // Если указан дебаг, то пишем сообщение if s.Development { c := color.New(ls.Color) s.Log.Println(c.Sprint(ls.Message)) } } func (s *LoggerService) Separator() { s.Log.Println("------------------------------------------------------------------") } func (s *LoggerService) RouteSeparator(route string) { s.Log.Println("----------------------" + route + "-------------------------------") } // Простой вывод текста func (s *LoggerService) Print(ls LogStruct) { // Если цвет не указан if ls.Color == 0 { ls.Color = color.FgWhite } // Пишем в консоль c := color.New(ls.Color) s.Log.Println(c.Sprint(ls.Message)) } // Ошибка func (s *LoggerService) Error(message LogErrorStruct) { // Меняем цвет на красный c := color.New(color.FgRed) // Пишем в консоль s.Log.Println(c.Sprint(message.Message)) // Добавляем название сервиса message.System = s.ServiceName // Маршим в байтики b, err := json.Marshal(message) if err != nil { s.Log.Println(err) } // Отправляем в шину if err := utils.SendMessage(s.WebhookUrl, b); err != nil { // Не получилось отправить в шину s.Log.Println("Не смогли отправить в nsq:", err) } } // Простое оповещение в телеграм без вывода в консоль func (s *LoggerService) Notify(message string) { m := &LogErrorStruct{ System: s.ServiceName, Message: message, Error: TypeError{Code: -111, Description: "Оповещение"}, } // Маршим в байтики b, err := json.Marshal(m) if err != nil { s.Log.Println(err) } // Отправляем в шину go utils.SendMessage(s.WebhookUrl, b) }