| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- package logger
- import (
- "dsbqj-admin/pkg/file"
- "fmt"
- "github.com/fatih/color"
- "log"
- "os"
- "path/filepath"
- "runtime"
- "time"
- )
- type Level int
- var (
- F *os.File
- F2 *os.File
- DefaultPrefix = ""
- DefaultCallerDepth = 2
- logger *log.Logger
- debug *log.Logger
- logPrefix = ""
- levelFlags = []string{"DEBUG", "INFO", "WARN", "ERROR", "FATAL"}
- logMod = ""
- )
- var colors = map[string]func(a ...interface{}) string{
- "Warning": color.New(color.FgYellow).Add(color.Bold).SprintFunc(),
- "Panic": color.New(color.BgRed).Add(color.Bold).SprintFunc(),
- "Error": color.New(color.FgRed).Add(color.Bold).SprintFunc(),
- "Info": color.New(color.FgCyan).Add(color.Bold).SprintFunc(),
- "Debug": color.New(color.FgWhite).Add(color.Bold).SprintFunc(),
- }
- var spaces = map[string]string{
- "Warning": "",
- "Panic": " ",
- "Error": " ",
- "Info": " ",
- "Debug": " ",
- }
- const (
- DEBUG Level = iota
- INFO
- WARNING
- ERROR
- FATAL
- )
- // Setup initialize the log instance
- func Init(tag string) {
- var err error
- filePath := getLogFilePath()
- fileName := tag + getLogFileName()
- logMod = os.Getenv("GIN_MODE")
- F, err = file.MustOpen(fileName, filePath)
- if err != nil {
- log.Fatalf("logging.Setup err: %v", err)
- }
- logger = log.New(F, DefaultPrefix, log.LstdFlags)
- F2, err = file.MustOpen("debug", filePath)
- if err != nil {
- log.Fatalf("logging.Setup err: %v", err)
- }
- debug = log.New(F2, DefaultPrefix, log.LstdFlags)
- // 这里启动一个携程去定时检测当前时间 是否是同一天
- go func() {
- for {
- last := time.Now().Format(os.Getenv("TIME_FORMAT"))
- time.Sleep(1 * time.Second)
- now := time.Now().Format(os.Getenv("TIME_FORMAT"))
- if last != now {
- filePath := getLogFilePath()
- fileName := tag + getLogFileName()
- F, err = file.MustOpen(fileName, filePath)
- if err != nil {
- log.Fatalf("logging.Setup err: %v", err)
- }
- logger = log.New(F, DefaultPrefix, log.LstdFlags)
- }
- }
- }()
- }
- //func checkDate() {
- // curDate := time.Now().Format(os.Getenv("TIME_FORMAT"))
- // if lastDate != curDate {
- // Init()
- // }
- //}
- func File(fileName, msg string) {
- filePath := getLogFilePath()
- logMod = os.Getenv("GIN_MODE")
- f, err := file.MustOpen(fileName, filePath)
- if err != nil {
- log.Fatalf("logging.Setup err: %v", err)
- }
- logger := log.New(f, DefaultPrefix, log.LstdFlags)
- logger.Println(msg)
- }
- // Debug output logs at debug level
- func Debug(format string, v ...interface{}) {
- setPrefix(DEBUG)
- msg := fmt.Sprintf(format, v...)
- if logMod == "debug" {
- Println("Debug", msg)
- }
- debug.Println(msg)
- }
- // Info output logs at info level
- func Info(format string, v ...interface{}) {
- setPrefix(INFO)
- msg := fmt.Sprintf(format, v...)
- Println("Info", msg)
- logger.Println(msg)
- }
- // Warn output logs at warn level
- func Warn(format string, v ...interface{}) {
- setPrefix(WARNING)
- msg := fmt.Sprintf(format, v...)
- if logMod == "debug" {
- Println("Warning", msg)
- }
- logger.Println(msg)
- }
- // Error output logs at error level
- func Error(format string, v ...interface{}) {
- setPrefix(ERROR)
- msg := fmt.Sprintf(format, v...)
- if logMod == "debug" {
- Println("Error", msg)
- }
- logger.Println(msg)
- }
- // Fatal output logs at fatal level
- func Fatal(format string, v ...interface{}) {
- setPrefix(FATAL)
- logger.Fatalln(v)
- }
- func Println(prefix string, msg string) {
- // TODO Release时去掉
- c := color.New()
- _, _ = c.Printf(
- "%s%s %s %s\n",
- colors[prefix]("["+prefix+"]"),
- spaces[prefix],
- time.Now().Format("2006-01-02 15:04:05"),
- msg,
- )
- }
- // setPrefix set the prefix of the log output
- func setPrefix(level Level) {
- _, file, line, ok := runtime.Caller(DefaultCallerDepth)
- if ok {
- logPrefix = fmt.Sprintf("[%s][%s:%d]", levelFlags[level], filepath.Base(file), line)
- } else {
- logPrefix = fmt.Sprintf("[%s]", levelFlags[level])
- }
- logger.SetPrefix(logPrefix)
- //checkDate()
- }
|