logrus.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package logger
  2. import (
  3. "os"
  4. "git.linuxforward.com/byom/byom-golang-lib/pkg/errors"
  5. "github.com/sirupsen/logrus"
  6. )
  7. type LogConfig struct {
  8. Level string
  9. Formatter string // "json" or "text"
  10. }
  11. func NewLogger(config LogConfig) (*logrus.Logger, error) {
  12. logger := logrus.New()
  13. // Set output
  14. logger.SetOutput(os.Stdout)
  15. // Validate and set formatter
  16. switch config.Formatter {
  17. case "json":
  18. logger.SetFormatter(&logrus.JSONFormatter{})
  19. case "text":
  20. logger.SetFormatter(&logrus.TextFormatter{
  21. FullTimestamp: true,
  22. })
  23. case "":
  24. // Default to text formatter
  25. logger.SetFormatter(&logrus.TextFormatter{
  26. FullTimestamp: true,
  27. })
  28. default:
  29. return nil, errors.NewConfigError("logger.formatter", errors.ErrInvalidInput)
  30. }
  31. // Validate and set level
  32. if config.Level == "" {
  33. // Default to info level
  34. logger.SetLevel(logrus.InfoLevel)
  35. } else {
  36. level, err := logrus.ParseLevel(config.Level)
  37. if err != nil {
  38. return nil, errors.NewConfigError("logger.level", err)
  39. }
  40. logger.SetLevel(level)
  41. }
  42. return logger, nil
  43. }