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)
|
||
}
|