init
This commit is contained in:
130
service/log.go
Normal file
130
service/log.go
Normal 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
1
service/log_test.go
Normal file
@ -0,0 +1 @@
|
||||
package service
|
47
service/model.go
Normal file
47
service/model.go
Normal 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"}
|
||||
// )
|
Reference in New Issue
Block a user