func Noticef(format string, v ...interface{}) {
	if logLevel >= notice {
		writeLog(createFormattedMessage(4, format, v))
	}
}
Noticef logs provided arguments to console when level is NOTICE, INFO or DEBUG.
package logger
import (
	js "encoding/json"
	"errors"
	"fmt"
	"path/filepath"
	"runtime"
	"strings"
	"sync"
	"time"
	"github.com/davecgh/go-spew/spew"
)
const (
	fgBoldBlack   string = "\x1b[30;1m"
	fbBoldRed     string = "\x1b[31;1m"
	fgBoldGreen   string = "\x1b[32;1m"
	fgBoldYellow  string = "\x1b[33;1m"
	fgBoldBlue    string = "\x1b[34;1m"
	fgBoldMagenta string = "\x1b[35;1m"
	fgBoldCyan    string = "\x1b[36;1m"
	fgBoldWhite   string = "\x1b[37;1m"
	fbBlack       string = "\x1b[30m"
	fgRed         string = "\x1b[31m"
	fgGreen       string = "\x1b[32m"
	fgYellow      string = "\x1b[33m"
	fgBlue        string = "\x1b[34m"
	fgMagenta     string = "\x1b[35m"
	fgCyan        string = "\x1b[36m"
	fgWhite       string = "\x1b[37m"
	fgNormal      string = "\x1b[0m"
)
const (
	_ = iota
	crit
	err
	warn
	notice
	info
	debug
	json
)
var (
	logLevels = map[string]int{
		"JSON":   7,
		"DEBUG":  6,
		"INFO":   5,
		"NOTICE": 4,
		"WARN":   3,
		"ERROR":  2,
		"CRIT":   1,
	}
	logLevel   = 6
	timeFormat = "2006/01/02 - 15:04:05"
	scs        = spew.NewDefaultConfig()
	mutex      = &sync.Mutex{}
)
type logMessage struct {
	v     []interface{}
	file  string
	line  int
	level int
}
type setLogger struct {
	level string
	out   string
}
func JSON(v ...interface{}) {
	if logLevel == debug {
		writeLog(createMessage(v, json))
	}
}
func Debug(v ...interface{}) {
	if logLevel == debug {
		writeLog(createMessage(v, debug))
	}
}
func Info(v ...interface{}) {
	if logLevel >= info {
		writeLog(createMessage(v, 5))
	}
}
func Notice(v ...interface{}) {
	if logLevel >= notice {
		writeLog(createMessage(v, 4))
	}
}
func Warn(v ...interface{}) {
	if logLevel >= warn {
		writeLog(createMessage(v, 3))
	}
}
func Error(v ...interface{}) {
	if logLevel >= err {
		writeLog(createMessage(v, 2))
	}
}
func Crit(v ...interface{}) {
	writeLog(createMessage(v, 1))
}
func Debugf(format string, v ...interface{}) {
	if logLevel == debug {
		writeLog(createFormattedMessage(debug, format, v))
	}
}
func Infof(format string, v ...interface{}) {
	if logLevel >= info {
		writeLog(createFormattedMessage(5, format, v))
	}
}