log.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package logger
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "log"
  6. "os"
  7. "path"
  8. "runtime/debug"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. type Log struct {
  14. lastDate string
  15. loglist []string
  16. }
  17. //默认日志等级。error(<3)|info(4)|debug(5)
  18. var LogLevel = "5"
  19. //日志文件保留最近的份数
  20. var KeepCount = 7
  21. var Logger = new(Log)
  22. func (c *Log) Init() {
  23. log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
  24. logfilename := time.Now().Format("20060102") + ".log"
  25. logFile, err := os.OpenFile("./"+logfilename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
  26. if err != nil {
  27. log.Panic("创建日志文件异常")
  28. os.Exit(1)
  29. }
  30. log.SetOutput(logFile)
  31. c.lastDate = time.Now().Format("2006-01-02")
  32. c.loglist = append(c.loglist, logfilename)
  33. //清除过期日志文件
  34. go c.clearLogfile()
  35. }
  36. func (c *Log) Println(obj interface{}) {
  37. fmt.Println(fmt.Sprintf("%s:%+v", time.Now().Format("2006-01-02 15:04:05"), obj))
  38. log.Println(fmt.Sprintf("%s:%+v", time.Now().Format("2006-01-02 15:04:05"), obj))
  39. }
  40. func (c *Log) Error(obj interface{}, info ...string) {
  41. c.makeLogFile()
  42. log.Println(fmt.Sprintf(" %s:%+v\n---Strace:%s", "ERROR", obj, string(debug.Stack())))
  43. if len(info) > 0 {
  44. log.Println(info)
  45. }
  46. }
  47. func (c *Log) DebugStack(obj interface{}) {
  48. if LogLevel >= "5" {
  49. c.makeLogFile()
  50. log.Println(fmt.Sprintf(" %s:%+v\n---Strace:%s", "Debug", obj, string(debug.Stack())))
  51. }
  52. }
  53. func (c *Log) InfoStack(obj interface{}) {
  54. if LogLevel >= "4" {
  55. c.makeLogFile()
  56. log.Println(fmt.Sprintf(" %s:%+v\n---Strace:%s", "Info", obj, string(debug.Stack())))
  57. }
  58. }
  59. func (c *Log) Debug(obj interface{}) {
  60. if LogLevel >= "5" {
  61. c.makeLogFile()
  62. sorce := strings.Split(string(debug.Stack()), "\n")[6:7][0]
  63. log.Println(fmt.Sprintf(" %s:%+v \n\t\t\t\t\t\t\t\tsource:%s", "Debug", obj, sorce))
  64. }
  65. }
  66. func (c *Log) Info(obj interface{}) {
  67. if LogLevel >= "4" {
  68. c.makeLogFile()
  69. sorce := strings.Split(string(debug.Stack()), "\n")[6:7][0]
  70. log.Println(fmt.Sprintf(" %s:%+v \n\t\t\t\t\t\t\t\tsource:%s", "Info", obj, sorce))
  71. }
  72. }
  73. func (c *Log) makeLogFile() {
  74. nowdate := time.Now().Format("2006-01-02")
  75. if c.lastDate != nowdate {
  76. c.Init()
  77. }
  78. }
  79. func (c *Log) clearLogfile() {
  80. dir, _ := os.Getwd()
  81. files, _ := ioutil.ReadDir(dir)
  82. nowday := time.Now().AddDate(0, 0, -1*KeepCount).Format("20060102")
  83. nowdayInt, _ := strconv.Atoi(nowday)
  84. for _, file := range files {
  85. if path.Ext(strings.ToLower(file.Name())) == ".log" {
  86. fileFlag := file.ModTime().Format("20060102")
  87. fileFlagInt, _ := strconv.Atoi(fileFlag)
  88. if fileFlagInt > 0 && fileFlagInt < nowdayInt {
  89. os.Remove("./" + file.Name())
  90. }
  91. }
  92. }
  93. }