131 lines
2.9 KiB
Go
131 lines
2.9 KiB
Go
|
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)
|
|||
|
}
|