logrus.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package logger
  2. import (
  3. "os"
  4. "github.com/sirupsen/logrus"
  5. )
  6. func NewLogger(config *Config) (*logrus.Logger, error) {
  7. logger := logrus.New()
  8. // Set output
  9. logger.SetOutput(os.Stdout)
  10. // Validate and set formatter
  11. switch config.Format {
  12. case "json":
  13. logger.SetFormatter(&logrus.JSONFormatter{})
  14. case "text":
  15. logger.SetFormatter(&logrus.TextFormatter{
  16. FullTimestamp: true,
  17. })
  18. case "":
  19. // Default to text formatter
  20. logger.SetFormatter(&logrus.TextFormatter{
  21. FullTimestamp: true,
  22. })
  23. default:
  24. return nil, NewConfigError(
  25. "configure",
  26. "format",
  27. config.Format,
  28. ErrInvalidFormat,
  29. "supported formats are 'json' and 'text'",
  30. )
  31. }
  32. // Validate and set level
  33. if config.Level == "" {
  34. // Default to info level
  35. logger.SetLevel(logrus.InfoLevel)
  36. } else {
  37. level, err := logrus.ParseLevel(config.Level)
  38. if err != nil {
  39. return nil, NewConfigError(
  40. "configure",
  41. "level",
  42. config.Level,
  43. ErrInvalidLevel,
  44. err.Error(),
  45. )
  46. }
  47. logger.SetLevel(level)
  48. }
  49. return logger, nil
  50. }