1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package logger
- import (
- "fmt"
- "log"
- "os"
- "runtime/debug"
- "strings"
- "time"
- )
- type Log struct {
- lastDate string
- loglist []string
- }
- //默认日志等级。error(<3)|info(4)|debug(5)
- var LogLevel = "5"
- //日志文件保留最近的份数
- var KeepCount = 7
- var Logger = new(Log)
- func (c *Log) Init() {
- log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
- logfilename := time.Now().Format("20060102") + ".log"
- logFile, err := os.OpenFile("./"+logfilename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
- if err != nil {
- log.Panic("创建日志文件异常")
- os.Exit(1)
- }
- log.SetOutput(logFile)
- c.lastDate = time.Now().Format("2006-01-02")
- c.loglist = append(c.loglist, logfilename)
- }
- func (c *Log) Println(obj interface{}) {
- fmt.Println(fmt.Sprintf("%s:%+v", time.Now().Format("2006-01-02 15:04:05"), obj))
- log.Println(fmt.Sprintf("%s:%+v", time.Now().Format("2006-01-02 15:04:05"), obj))
- }
- func (c *Log) Error(obj interface{}, info ...string) {
- c.makeLogFile()
- log.Println(fmt.Sprintf(" %s:%+v\n---Strace:%s", "ERROR", obj, string(debug.Stack())))
- if len(info) > 0 {
- log.Println(info)
- }
- }
- func (c *Log) DebugStack(obj interface{}) {
- if LogLevel >= "5" {
- c.makeLogFile()
- log.Println(fmt.Sprintf(" %s:%+v\n---Strace:%s", "Debug", obj, string(debug.Stack())))
- }
- }
- func (c *Log) InfoStack(obj interface{}) {
- if LogLevel >= "4" {
- c.makeLogFile()
- log.Println(fmt.Sprintf(" %s:%+v\n---Strace:%s", "Info", obj, string(debug.Stack())))
- }
- }
- func (c *Log) Debug(obj interface{}) {
- if LogLevel >= "5" {
- c.makeLogFile()
- sorce := strings.Split(string(debug.Stack()), "\n")[6:7][0]
- log.Println(fmt.Sprintf(" %s:%+v \n\t\t\t\t\t\t\t\tsource:%s", "Debug", obj, sorce))
- }
- }
- func (c *Log) Info(obj interface{}) {
- if LogLevel >= "4" {
- c.makeLogFile()
- sorce := strings.Split(string(debug.Stack()), "\n")[6:7][0]
- log.Println(fmt.Sprintf(" %s:%+v \n\t\t\t\t\t\t\t\tsource:%s", "Info", obj, sorce))
- }
- }
- func (c *Log) makeLogFile() {
- nowdate := time.Now().Format("2006-01-02")
- if c.lastDate != nowdate {
- c.Init()
- //清除过期日志文件
- go c.clearLogfile()
- }
- }
- func (c *Log) clearLogfile() {
- if len(c.loglist) <= KeepCount {
- return
- }
- for _, logf := range c.loglist[0 : len(c.loglist)-KeepCount] {
- err := os.Remove("./" + logf)
- if err != nil {
- fmt.Println(err)
- }
- }
- c.loglist = c.loglist[len(c.loglist)-KeepCount:]
- }
|