fslog_instance.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package fslog
  2. import (
  3. "go.uber.org/zap"
  4. "go.uber.org/zap/zapcore"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "sync"
  9. )
  10. const (
  11. LoggerLevelInfo = "info"
  12. LoggerLevelError = "error"
  13. LoggerLevelDebug = "debug"
  14. LoggerLevelWarn = "Warn"
  15. )
  16. var LoggerLever = LoggerLevelDebug
  17. func chooseLoggerLever() zapcore.Level {
  18. switch LoggerLever {
  19. case LoggerLevelInfo:
  20. return zapcore.InfoLevel
  21. case LoggerLevelError:
  22. return zapcore.ErrorLevel
  23. case LoggerLevelDebug:
  24. return zapcore.DebugLevel
  25. case LoggerLevelWarn:
  26. return zapcore.WarnLevel
  27. default:
  28. return zapcore.DebugLevel
  29. }
  30. }
  31. var logger *zap.Logger
  32. var initLoggerOnce sync.Once
  33. const logDir = "logs"
  34. func lazyInitialize() {
  35. initLoggerOnce.Do(func() {
  36. if !pathExists(logDir) {
  37. err := os.MkdirAll(logDir, os.ModeDir|os.ModePerm)
  38. if err != nil {
  39. panic(err)
  40. }
  41. }
  42. logFilePath := filepath.Join(logDir, "log")
  43. file, err := os.Create(logFilePath)
  44. if err != nil {
  45. panic(err)
  46. }
  47. developmentEncoderConfig := zap.NewDevelopmentEncoderConfig()
  48. encoder := zapcore.NewConsoleEncoder(developmentEncoderConfig)
  49. core := zapcore.NewTee(
  50. zapcore.NewCore(encoder, zapcore.AddSync(file), chooseLoggerLever()),
  51. zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), chooseLoggerLever()),
  52. )
  53. logger = zap.New(core, zap.AddCaller())
  54. })
  55. }
  56. func Info(serviceName string, funcName string, callName string, message string) {
  57. lazyInitialize()
  58. callerFields := getCallerInfoForLog(serviceName, funcName, callName)
  59. logger.Info(message, callerFields...)
  60. }
  61. func Error(serviceName string, funcName string, callName string, message string) {
  62. lazyInitialize()
  63. callerFields := getCallerInfoForLog(serviceName, funcName, callName)
  64. logger.Error(message, callerFields...)
  65. }
  66. func Debug(serviceName string, funcName string, callName string, message string) {
  67. lazyInitialize()
  68. callerFields := getCallerInfoForLog(serviceName, funcName, callName)
  69. logger.Debug(message, callerFields...)
  70. }
  71. func Warn(serviceName string, funcName string, callName string, message string) {
  72. lazyInitialize()
  73. callerFields := getCallerInfoForLog(serviceName, funcName, callName)
  74. logger.Warn(message, callerFields...)
  75. }
  76. func getCallerInfoForLog(serviceName string, funcName string, callName string) []zap.Field {
  77. fields := make([]zap.Field, 0)
  78. if strings.Trim(serviceName, " ") != "" {
  79. fields = append(fields, zap.String("service", serviceName))
  80. }
  81. if strings.Trim(funcName, " ") != "" {
  82. fields = append(fields, zap.String("function", funcName))
  83. }
  84. if strings.Trim(callName, " ") != "" {
  85. fields = append(fields, zap.String("call", callName))
  86. }
  87. return fields
  88. }
  89. func pathExists(path string) bool {
  90. _, err := os.Stat(path)
  91. if err == nil {
  92. return true
  93. }
  94. if os.IsNotExist(err) {
  95. return false
  96. }
  97. return false
  98. }