system_log_policy.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package service
  2. import (
  3. "fmt"
  4. "os"
  5. "strings"
  6. )
  7. // 数据库落库最低级别(数值越大越严重)。低于 min 的日志不写 system_logs。
  8. const (
  9. logRankDebug = 0
  10. logRankInfo = 1
  11. logRankWarn = 2
  12. logRankError = 3
  13. logRankNone = -1 // 环境变量 none/off:全部不落库
  14. )
  15. func logLevelRank(level string) int {
  16. switch strings.ToLower(strings.TrimSpace(level)) {
  17. case "debug", "trace":
  18. return logRankDebug
  19. case "info":
  20. return logRankInfo
  21. case "warn", "warning":
  22. return logRankWarn
  23. case "error", "err", "fatal", "critical":
  24. return logRankError
  25. default:
  26. return logRankInfo
  27. }
  28. }
  29. // ParseSystemLogMinPersistLevel 解析 SYSTEM_LOG_MIN_LEVEL。
  30. // debug|info|warn|error|none;空默认为 info;无法识别时回退为 info。
  31. func ParseSystemLogMinPersistLevel(s string) int {
  32. switch strings.ToLower(strings.TrimSpace(s)) {
  33. case "", "info":
  34. return logRankInfo
  35. case "debug", "trace":
  36. return logRankDebug
  37. case "warn", "warning":
  38. return logRankWarn
  39. case "error", "err":
  40. return logRankError
  41. case "none", "off", "disable", "false", "0":
  42. return logRankNone
  43. default:
  44. return logRankInfo
  45. }
  46. }
  47. // ParseSystemLogMinPersistLevelStrict 用于 API:非法取值返回错误。
  48. func ParseSystemLogMinPersistLevelStrict(s string) (int, error) {
  49. v := strings.ToLower(strings.TrimSpace(s))
  50. if v == "" {
  51. return 0, fmt.Errorf("min_level 不能为空")
  52. }
  53. switch v {
  54. case "debug", "trace":
  55. return logRankDebug, nil
  56. case "info":
  57. return logRankInfo, nil
  58. case "warn", "warning":
  59. return logRankWarn, nil
  60. case "error", "err":
  61. return logRankError, nil
  62. case "none", "off", "disable", "false", "0":
  63. return logRankNone, nil
  64. default:
  65. return 0, fmt.Errorf("无效的 min_level,可选: debug, info, warn, error, none")
  66. }
  67. }
  68. // SystemLogMinPersistLevelFromEnv 读取环境变量 SYSTEM_LOG_MIN_LEVEL。
  69. func SystemLogMinPersistLevelFromEnv() int {
  70. return ParseSystemLogMinPersistLevel(os.Getenv("SYSTEM_LOG_MIN_LEVEL"))
  71. }
  72. // SystemLogMinLevelLabel 用于启动日志说明。
  73. func SystemLogMinLevelLabel(min int) string {
  74. switch min {
  75. case logRankDebug:
  76. return "debug"
  77. case logRankInfo:
  78. return "info"
  79. case logRankWarn:
  80. return "warn"
  81. case logRankError:
  82. return "error"
  83. case logRankNone:
  84. return "none"
  85. default:
  86. return "info"
  87. }
  88. }