logger/service/log.go

131 lines
2.9 KiB
Go
Raw Normal View History

2022-06-03 10:32:25 +03:00
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)
}