123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- package global
- import (
- "fmt"
- "io"
- "log"
- "os"
- "time"
- "github.com/sirupsen/logrus"
- )
- var Logger *logrus.Logger
- type Hook struct {
- Writer io.Writer
- Formatter logrus.Formatter
- Level []logrus.Level
- }
- func (h *Hook) Fire(entry *logrus.Entry) error {
-
- if entry.HasCaller() {
- entry.Data["file"] = fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)
- }
-
- line, err := h.Formatter.Format(entry)
- if err != nil {
- return err
- }
- h.Writer.Write(line)
- return nil
- }
- func (h *Hook) Levels() []logrus.Level {
- return h.Level
- }
- func newHook(writer io.Writer, formatter logrus.Formatter, level logrus.Level) *Hook {
- var levels []logrus.Level
-
- for _, l := range logrus.AllLevels {
- if l <= level {
- levels = append(levels, l)
- }
- }
-
- return &Hook{
- Writer: writer,
- Formatter: formatter,
- Level: levels,
- }
- }
- func createLogFile(logFilePath string) (*os.File, string, error) {
-
- currentDate := time.Now().Format("2006-01-02-15-04-05")
- logFileName := fmt.Sprintf("%s/log-%s.log", logFilePath, currentDate)
-
- logFile, err := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
- return logFile, logFileName, err
- }
- func InitLogs(logFilePath string, logLevelStr string) *logrus.Logger {
-
- if _, err := os.Stat(logFilePath); os.IsNotExist(err) {
-
- err := os.MkdirAll(logFilePath, os.ModePerm)
- if err != nil {
- fmt.Println("Error creating directory:", err)
- return nil
- }
- fmt.Println("Directory created:", logFilePath)
- }
-
- logLevel, err := logrus.ParseLevel(logLevelStr)
- if err != nil {
- logLevel = logrus.InfoLevel
- log.Printf("Invalid log level: %s. Defaulting to info", logLevelStr)
- }
-
- Logger = logrus.New()
- Logger.SetOutput(io.Discard)
-
- Logger.SetReportCaller(true)
-
- logFile, logFileName, err := createLogFile(logFilePath)
- if err != nil {
- log.Printf("Failed to open log file: %s", logFileName)
- panic(err)
- }
-
- Logger.AddHook(newHook(
- logFile,
- &logrus.JSONFormatter{},
- logLevel,
- ))
-
- Logger.AddHook(newHook(
- os.Stderr,
- &logrus.TextFormatter{
- FullTimestamp: true,
- ForceColors: true,
- },
- logLevel,
- ))
-
- go func() {
-
- ticker := time.NewTicker(24 * time.Hour)
- defer ticker.Stop()
- for {
- <-ticker.C
-
- logFile.Close()
-
- newLogFile, newLogFileName, err := createLogFile(logFilePath)
- if err != nil {
- log.Printf("Failed to create new log file: %s", newLogFileName)
- continue
- }
- logFile = newLogFile
-
- Logger.ReplaceHooks(make(logrus.LevelHooks))
-
- Logger.AddHook(newHook(
- logFile,
- &logrus.JSONFormatter{},
- logLevel,
- ))
-
- Logger.AddHook(newHook(
- os.Stderr,
- &logrus.TextFormatter{
- FullTimestamp: true,
- ForceColors: true,
- },
- logLevel,
- ))
- }
- }()
- return Logger
- }
|