fslog_instance.go 2.3 KB

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