log.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package logger
  2. import (
  3. "fmt"
  4. "os"
  5. logrus "github.com/sirupsen/logrus"
  6. "github.com/imgproxy/imgproxy/v3/config/configurators"
  7. )
  8. func init() {
  9. // Configure logrus so it can be used before Init().
  10. // Structured formatter is a compromise between JSON and pretty formatters.
  11. logrus.SetOutput(os.Stdout)
  12. logrus.SetFormatter(&structuredFormatter{})
  13. }
  14. func Init() error {
  15. logrus.SetOutput(os.Stdout)
  16. logFormat := "pretty"
  17. logLevel := "info"
  18. configurators.String(&logFormat, "IMGPROXY_LOG_FORMAT")
  19. configurators.String(&logLevel, "IMGPROXY_LOG_LEVEL")
  20. switch logFormat {
  21. case "structured":
  22. logrus.SetFormatter(&structuredFormatter{})
  23. case "json":
  24. logrus.SetFormatter(&logrus.JSONFormatter{})
  25. case "gcp":
  26. logrus.SetFormatter(&logrus.JSONFormatter{
  27. FieldMap: logrus.FieldMap{
  28. "level": "severity",
  29. "msg": "message",
  30. },
  31. })
  32. default:
  33. logrus.SetFormatter(newPrettyFormatter())
  34. }
  35. levelLogLevel, err := logrus.ParseLevel(logLevel)
  36. if err != nil {
  37. levelLogLevel = logrus.InfoLevel
  38. }
  39. logrus.SetLevel(levelLogLevel)
  40. if isSyslogEnabled() {
  41. slHook, err := newSyslogHook()
  42. if err != nil {
  43. return fmt.Errorf("Unable to connect to syslog daemon: %s", err)
  44. }
  45. logrus.AddHook(slHook)
  46. }
  47. return nil
  48. }