You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
5.8 KiB
199 lines
5.8 KiB
package logger
|
|
|
|
//
|
|
//import (
|
|
// "context"
|
|
// "fmt"
|
|
// "io"
|
|
// "os"
|
|
// "runtime/debug"
|
|
// "strconv"
|
|
// "strings"
|
|
// "sync"
|
|
// "time"
|
|
//
|
|
// "git.lowcodeplatform.net/fabric/lib"
|
|
// "github.com/sirupsen/logrus"
|
|
//)
|
|
//
|
|
//const sep = string(os.PathSeparator)
|
|
//
|
|
//type ConfigFileLogger struct {
|
|
// Dir string
|
|
// IntervalReload, IntervalClearFiles time.Duration
|
|
// PeriodSaveFiles string
|
|
//}
|
|
//
|
|
//// вспомогательная фукнция очистки старых файлов для файлового логера
|
|
//func (l *log) fileLoggerClearing(ctx context.Context) {
|
|
//
|
|
// // попытка очистки старых файлов (каждые пол часа)
|
|
// go func() {
|
|
// ticker := time.NewTicker(l.IntervalClearFiles)
|
|
// defer ticker.Stop()
|
|
//
|
|
// // получаем период, через который мы будем удалять файлы
|
|
// period := l.PeriodSaveFiles
|
|
// if period == "" {
|
|
// l.Error(fmt.Errorf("%s", "Fail perion save log files. (expected format: year-month-day; eg: 0-1-0)"))
|
|
// return
|
|
// }
|
|
// slPeriod := strings.Split(period, "-")
|
|
// if len(slPeriod) < 3 {
|
|
// l.Error(fmt.Errorf("%s", "Fail perion save log files. (expected format: year-month-day; eg: 0-1-0)"))
|
|
// return
|
|
// }
|
|
//
|
|
// // получаем числовые значения года месяца и дня для расчета даты удаления файлов
|
|
// year, err := strconv.Atoi(slPeriod[0])
|
|
// if err != nil {
|
|
// l.Error(err, "Fail converted Year from period saved log files. (expected format: year-month-day; eg: 0-1-0)")
|
|
// }
|
|
// month, err := strconv.Atoi(slPeriod[1])
|
|
// if err != nil {
|
|
// l.Error(err, "Fail converted Month from period saved log files. (expected format: year-month-day; eg: 0-1-0)")
|
|
// }
|
|
// day, err := strconv.Atoi(slPeriod[2])
|
|
// if err != nil {
|
|
// l.Error(err, "Fail converted Day from period saved log files. (expected format: year-month-day; eg: 0-1-0)")
|
|
// }
|
|
//
|
|
// for {
|
|
// select {
|
|
// case <-ctx.Done():
|
|
// return
|
|
// case <-ticker.C:
|
|
// oneMonthAgo := time.Now().AddDate(-year, -month, -day) // minus 1 месяц
|
|
// fileMonthAgoDate := oneMonthAgo.Format("2006.01.02")
|
|
//
|
|
// // пробегаем директорию и читаем все файлы, если имя меньше текущее время - месяц = удаляем
|
|
// directory, _ := os.Open(l.Dir)
|
|
// objects, err := directory.Readdir(-1)
|
|
// if err != nil {
|
|
// l.Error(err, "Error read directory: ", directory)
|
|
// return
|
|
// }
|
|
//
|
|
// for _, obj := range objects {
|
|
// filename := obj.Name()
|
|
// filenameMonthAgoDate := fileMonthAgoDate + "_" + l.Service
|
|
//
|
|
// if filenameMonthAgoDate > filename {
|
|
// pathFile := l.Dir + sep + filename
|
|
// err = os.Remove(pathFile)
|
|
// if err != nil {
|
|
// l.Error(err, "Error deleted file: ", pathFile)
|
|
// return
|
|
// }
|
|
// }
|
|
// }
|
|
// ticker = time.NewTicker(l.IntervalClearFiles)
|
|
// }
|
|
// }
|
|
// }()
|
|
//}
|
|
//
|
|
//// NewFileLogger инициируем логер, которых хранит логи в файлах по указанному пути
|
|
//func NewFileLogger(ctx context.Context, cfg ConfigLogger) (Log, error) {
|
|
// var output io.Writer
|
|
// var file *os.File
|
|
// var err error
|
|
// var mode os.FileMode
|
|
// m := sync.Mutex{}
|
|
//
|
|
// l := &log{
|
|
// Output: output,
|
|
// Levels: cfg.Level,
|
|
// UID: cfg.Uid,
|
|
// Name: cfg.Name,
|
|
// Service: cfg.Srv,
|
|
// Config: cfg.Config,
|
|
// Dir: cfg.File.Dir,
|
|
// IntervalReload: cfg.File.IntervalReload,
|
|
// IntervalClearFiles: cfg.File.IntervalClearFiles,
|
|
// PeriodSaveFiles: cfg.File.PeriodSaveFiles,
|
|
// mux: &m,
|
|
// File: file,
|
|
// }
|
|
//
|
|
// datefile := time.Now().Format("2006.01.02")
|
|
// logName := datefile + "_" + cfg.Srv + "_" + cfg.Uid + ".log"
|
|
//
|
|
// fmt.Println(logName)
|
|
//
|
|
// // создаем/открываем файл логирования и назначаем его логеру
|
|
// mode = 0711
|
|
// err = lib.CreateDir(cfg.File.Dir, mode)
|
|
// if err != nil {
|
|
// logrus.Error(err, "Error creating directory")
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// pathFile := cfg.File.Dir + "/" + logName
|
|
// if !lib.IsExist(pathFile) {
|
|
// err = lib.CreateFile(pathFile)
|
|
// if err != nil {
|
|
// logrus.Error(err, "Error creating file")
|
|
// return nil, err
|
|
// }
|
|
// }
|
|
//
|
|
// file, err = os.OpenFile(pathFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
|
// defer file.Close()
|
|
//
|
|
// l.File = file
|
|
// l.Output = file
|
|
// if err != nil {
|
|
// logrus.Panic(err, "error opening file")
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// defer func() {
|
|
// rec := recover()
|
|
// if rec != nil {
|
|
// b := string(debug.Stack())
|
|
// fmt.Printf("panic in loggier (RotateInit). stack: %+v", b)
|
|
// //cancel()
|
|
// //os.Exit(1)
|
|
// }
|
|
// }()
|
|
//
|
|
// // попытка обновить файл (раз в 10 минут)
|
|
// go func() {
|
|
// ticker := time.NewTicker(l.IntervalReload)
|
|
// defer ticker.Stop()
|
|
//
|
|
// for {
|
|
// select {
|
|
// case <-ctx.Done():
|
|
// return
|
|
// case <-ticker.C:
|
|
// l.File.Close() // закрыл старый файл
|
|
// datefile = time.Now().Format("2006.01.02")
|
|
// logName = datefile + "_" + cfg.Srv + "_" + cfg.Uid + ".log"
|
|
// pathFile = cfg.File.Dir + "/" + logName
|
|
// if !lib.IsExist(pathFile) {
|
|
// err := lib.CreateFile(pathFile)
|
|
// if err != nil {
|
|
// logrus.Error(err, "Error creating file")
|
|
// return
|
|
// }
|
|
// }
|
|
//
|
|
// file, err = os.OpenFile(pathFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
|
// if err != nil {
|
|
// logrus.Panic(err, "error opening file")
|
|
// return
|
|
// }
|
|
//
|
|
// output = file
|
|
// l.Output = output
|
|
// l.File = file
|
|
// ticker = time.NewTicker(l.IntervalReload)
|
|
// }
|
|
// }
|
|
// }()
|
|
// l.fileLoggerClearing(ctx)
|
|
//
|
|
// return l, err
|
|
//}
|
|
|