stderr.go 968 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package deprecated
  2. import (
  3. "os"
  4. "strconv"
  5. "github.com/sagernet/sing/common/logger"
  6. )
  7. type stderrManager struct {
  8. logger logger.Logger
  9. reported map[string]bool
  10. }
  11. func NewStderrManager(logger logger.Logger) Manager {
  12. return &stderrManager{
  13. logger: logger,
  14. reported: make(map[string]bool),
  15. }
  16. }
  17. func (f *stderrManager) ReportDeprecated(feature Note) {
  18. if f.reported[feature.Name] {
  19. return
  20. }
  21. f.reported[feature.Name] = true
  22. if !feature.Impending() {
  23. f.logger.Warn(feature.MessageWithLink())
  24. return
  25. }
  26. if feature.EnvName != "" {
  27. enable, enableErr := strconv.ParseBool(os.Getenv("ENABLE_DEPRECATED_" + feature.EnvName))
  28. if enableErr == nil && enable {
  29. f.logger.Warn(feature.MessageWithLink())
  30. return
  31. }
  32. f.logger.Error(feature.MessageWithLink())
  33. f.logger.Fatal("to continuing using this feature, set environment variable ENABLE_DEPRECATED_" + feature.EnvName + "=true")
  34. } else {
  35. f.logger.Error(feature.MessageWithLink())
  36. }
  37. }