log.go 2.3 KB

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