package logger import ( "io" "log" "os" "time" "gogs.veloe.link/toomanysugar/GoEthemineTelegramBot/cmd/settings" ) type customLogWriter struct { Writer io.Writer } var ( LogInfo *log.Logger LogWarn *log.Logger LogError *log.Logger LogDebug *log.Logger ) // Initializes Loggers func LoggersInit() { fullLogPath := settings.FullLogPath() errorLogPath := settings.ErrorLogPath() fullLog, err := os.OpenFile(fullLogPath, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0766) if err != nil { log.Panic(err) } // Prints log to os.Stdout, fullLog, fullLogWriter := &customLogWriter{io.MultiWriter(os.Stdout, fullLog)} errLog, err := os.OpenFile(errorLogPath, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0766) if err != nil { log.Panic(err) } // Prints log to os.Stdout, fullLog, errLog errLogWriter := &customLogWriter{io.MultiWriter(os.Stdout, fullLog, errLog)} LogInfo = log.New(fullLogWriter, "INFO\t", 0) LogWarn = log.New(fullLogWriter, "WARNING\t", 0) LogError = log.New(errLogWriter, "ERROR\t", log.Lshortfile) LogDebug = log.New(fullLogWriter, "DEBUG\t", log.Lshortfile) } // Passes message to writer with added current time func (writer customLogWriter) Write(message []byte) (int, error) { bytes := append([]byte(time.Now().Format("[01-02-2006 15:04:05] "))[:], message...) n, err := writer.Writer.Write(bytes) if err != nil { return n, err } if n != len(bytes) { return n, io.ErrShortWrite } return len(bytes), nil }