logger.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package logger
  2. import (
  3. "os"
  4. "github.com/sirupsen/logrus"
  5. )
  6. // Fields type for structured logging
  7. type Fields logrus.Fields
  8. var (
  9. // defaultLogger is the default logger instance
  10. defaultLogger = logrus.New()
  11. )
  12. func init() {
  13. // Set default configuration
  14. defaultLogger.SetOutput(os.Stdout)
  15. defaultLogger.SetLevel(logrus.InfoLevel)
  16. defaultLogger.SetFormatter(&logrus.TextFormatter{
  17. FullTimestamp: true,
  18. })
  19. }
  20. // Configure sets up the global logger configuration
  21. func Configure(level string, noColor, forceColors, inJSON bool) error {
  22. // Set log level
  23. if level != "" {
  24. lvl, err := logrus.ParseLevel(level)
  25. if err != nil {
  26. return err
  27. }
  28. defaultLogger.SetLevel(lvl)
  29. }
  30. // Configure formatter
  31. if inJSON {
  32. defaultLogger.SetFormatter(&logrus.JSONFormatter{})
  33. } else {
  34. defaultLogger.SetFormatter(&logrus.TextFormatter{
  35. ForceColors: forceColors,
  36. DisableColors: noColor,
  37. FullTimestamp: true,
  38. })
  39. }
  40. return nil
  41. }
  42. // NewLogger creates a new logger entry with component field
  43. func NewLogger(component string) *logrus.Entry {
  44. return defaultLogger.WithField("component", component)
  45. }
  46. // WithRequestID adds request ID to the logger entry
  47. func WithRequestID(logger *logrus.Entry, requestID string) *logrus.Entry {
  48. return logger.WithField("request_id", requestID)
  49. }
  50. // GetLogger returns the default logger instance
  51. func GetLogger() *logrus.Logger {
  52. return defaultLogger
  53. }