log.go 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package utils
  2. import (
  3. "errors"
  4. "fmt"
  5. "runtime"
  6. "github.com/astaxie/beego/config"
  7. "github.com/astaxie/beego/logs"
  8. )
  9. var instances = make(map[string]*logs.BeeLogger)
  10. // NewLog 构造日志对象
  11. func NewLog(tp ...string) *logs.BeeLogger {
  12. logType := "common"
  13. if len(tp) > 0 {
  14. if tp[0] != "" {
  15. logType = tp[0]
  16. }
  17. }
  18. if v, ok := instances[logType]; ok {
  19. return v
  20. }
  21. log := logs.NewLogger()
  22. instances[logType] = log
  23. // 读取配置文件
  24. conf, err := config.NewConfig("ini", GetAppRoot()+"/conf/log.conf")
  25. if err != nil {
  26. log.SetLogger(logs.AdapterConsole)
  27. return log
  28. }
  29. // 读文件存储位置
  30. filename := conf.String(logType + "::filename")
  31. // 输出级别
  32. level := conf.String(logType + "::level")
  33. if level == "" {
  34. level = "error"
  35. }
  36. if filename == "" {
  37. filename = "./" + logType + ".log"
  38. }
  39. log.Async()
  40. log.SetLogger(logs.AdapterFile, `{"filename":"`+filename+`"}`)
  41. return log
  42. }
  43. // LogError 错误日志
  44. func LogError(v ...interface{}) error {
  45. log := instances["common"]
  46. preMsg := ""
  47. _, file, line, ok := runtime.Caller(1)
  48. if ok {
  49. preMsg = fmt.Sprintf("file: %s line=%d : ", file, line)
  50. }
  51. log.Error(preMsg, v...)
  52. if len(v) > 0 {
  53. firstV := v[0]
  54. switch err := firstV.(type) {
  55. case string:
  56. return errors.New(err)
  57. case error:
  58. return err
  59. default:
  60. msg := "Unknown error type"
  61. return errors.New(msg)
  62. }
  63. }
  64. return nil
  65. }
  66. // LogInfo Info 日志
  67. func LogInfo(v ...interface{}) {
  68. log := instances["common"]
  69. preMsg := ""
  70. _, file, line, ok := runtime.Caller(1)
  71. if ok {
  72. preMsg = fmt.Sprintf("file: %s line=%d : ", file, line)
  73. }
  74. log.Error(preMsg, v...)
  75. }
  76. // GetDefaultLogger 获取默认 logger
  77. func GetDefaultLogger() *logs.BeeLogger {
  78. log := instances["common"]
  79. log.SetLogFuncCallDepth(4)
  80. return log
  81. }
  82. func LogInit() {
  83. NewLog()
  84. }