|
@@ -10,37 +10,39 @@ import (
|
|
|
"github.com/sirupsen/logrus"
|
|
|
)
|
|
|
|
|
|
+
|
|
|
var Logger *logrus.Logger
|
|
|
|
|
|
|
|
|
|
|
|
type Hook struct {
|
|
|
- Writer io.Writer
|
|
|
- Formatter logrus.Formatter
|
|
|
- Level []logrus.Level
|
|
|
+ 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
|
|
|
+ return err
|
|
|
}
|
|
|
- h.Writer.Write(line)
|
|
|
+ h.Writer.Write(line)
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (h *Hook) Levels() []logrus.Level {
|
|
|
- return h.Level
|
|
|
+ return h.Level
|
|
|
}
|
|
|
|
|
|
|
|
@@ -49,11 +51,13 @@ func (h *Hook) Levels() []logrus.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,
|
|
@@ -61,63 +65,111 @@ func newHook(writer io.Writer, formatter logrus.Formatter, level logrus.Level) *
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+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)
|
|
|
+ fmt.Println("Error creating directory:", err)
|
|
|
return nil
|
|
|
}
|
|
|
- fmt.Println("Directory created:", logFilePath)
|
|
|
+ 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)
|
|
|
+ log.Printf("Invalid log level: %s. Defaulting to info", logLevelStr)
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
Logger = logrus.New()
|
|
|
- Logger.SetOutput(io.Discard)
|
|
|
+ Logger.SetOutput(io.Discard)
|
|
|
|
|
|
-
|
|
|
+
|
|
|
Logger.SetReportCaller(true)
|
|
|
|
|
|
-
|
|
|
- currentDate := time.Now().Format("2006-01-02")
|
|
|
- logFileName := fmt.Sprintf("%s/log-%s.log", logFilePath, currentDate)
|
|
|
-
|
|
|
-
|
|
|
- logFile, err := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
|
|
|
+
|
|
|
+ logFile, logFileName, err := createLogFile(logFilePath)
|
|
|
if err != nil {
|
|
|
- log.Printf("Failed to open log file: %s", logFileName)
|
|
|
- panic(err)
|
|
|
+ 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,
|
|
|
+ FullTimestamp: true,
|
|
|
+ ForceColors: true,
|
|
|
},
|
|
|
logLevel,
|
|
|
))
|
|
|
- return Logger
|
|
|
+
|
|
|
+
|
|
|
+ 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
|
|
|
}
|