logger.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package logger
  2. import (
  3. "io"
  4. "log"
  5. "os"
  6. "time"
  7. "gogs.veloe.link/toomanysugar/GoEthemineTelegramBot/cmd/settings"
  8. )
  9. type customLogWriter struct {
  10. Writer io.Writer
  11. }
  12. var (
  13. LogInfo *log.Logger
  14. LogWarn *log.Logger
  15. LogError *log.Logger
  16. LogDebug *log.Logger
  17. )
  18. // Initializes Loggers
  19. func LoggersInit() {
  20. fullLogPath := settings.FullLogPath()
  21. errorLogPath := settings.ErrorLogPath()
  22. fullLog, err := os.OpenFile(fullLogPath, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0766)
  23. if err != nil {
  24. log.Panic(err)
  25. }
  26. // Prints log to os.Stdout, fullLog,
  27. fullLogWriter := &customLogWriter{io.MultiWriter(os.Stdout, fullLog)}
  28. errLog, err := os.OpenFile(errorLogPath, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0766)
  29. if err != nil {
  30. log.Panic(err)
  31. }
  32. // Prints log to os.Stdout, fullLog, errLog
  33. errLogWriter := &customLogWriter{io.MultiWriter(os.Stdout, fullLog, errLog)}
  34. LogInfo = log.New(fullLogWriter, "INFO\t", 0)
  35. LogWarn = log.New(fullLogWriter, "WARNING\t", 0)
  36. LogError = log.New(errLogWriter, "ERROR\t", log.Lshortfile)
  37. LogDebug = log.New(fullLogWriter, "DEBUG\t", log.Lshortfile)
  38. }
  39. // Passes message to writer with added current time
  40. func (writer customLogWriter) Write(message []byte) (int, error) {
  41. bytes := append([]byte(time.Now().Format("[01-02-2006 15:04:05] "))[:], message...)
  42. n, err := writer.Writer.Write(bytes)
  43. if err != nil {
  44. return n, err
  45. }
  46. if n != len(bytes) {
  47. return n, io.ErrShortWrite
  48. }
  49. return len(bytes), nil
  50. }