This commit is contained in:
Кобелев Андрей Андреевич
2022-06-03 10:32:25 +03:00
parent 02db2c5c68
commit 7be4b7fb19
10 changed files with 471 additions and 0 deletions

130
service/log.go Normal file
View File

@ -0,0 +1,130 @@
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)
}

1
service/log_test.go Normal file
View File

@ -0,0 +1 @@
package service

47
service/model.go Normal file
View File

@ -0,0 +1,47 @@
package service
import (
"log"
"github.com/fatih/color"
)
type (
Config struct {
System string // Название сервиса
Development bool // Режим разработки
Directory string // Папка в которую необходимо сохранять логи
LogFileName string // Файл логов
PanicFileName string // Файл ошибок с паникой
Webhook string // Url для отправки вебхука
}
LoggerService struct {
Log *log.Logger
ServiceName string
WebhookUrl string
Development bool
}
LogStruct struct {
Message string
Color color.Attribute
}
LogErrorStruct struct {
System string `json:"system"`
Message string `json:"message"`
Error TypeError `json:"error"`
}
TypeError struct {
Code int `json:"code"`
Description string `json:"description"`
}
)
// var (
// MarshalError = TypeError{Code: 1, Description: "Ошибка маршала"}
// ServiceError = TypeError{Code: 2, Description: "Сервисная ошибка"}
// CacheError = TypeError{Code: 3, Description: "Ошибка badger"}
// )