1 Star 0 Fork 0

plugins-gin / engine

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
logger.go 1.98 KB
一键复制 编辑 原始数据 按行查看 历史
root 提交于 2020-10-22 16:20 . add base code
package engine
import (
"fmt"
"io"
"log"
"os"
"sync"
"github.com/logrusorgru/aurora"
"github.com/mattn/go-colorable"
)
// LogWriter 多端写日志类
type LogWriter struct {
*MultiLogWriter
}
type MultiLogWriter struct {
sync.Map
}
var logWriter = &LogWriter{new(MultiLogWriter)}
var multiLogger = log.New(logWriter.MultiLogWriter, "", log.LstdFlags)
var colorLogger = log.New(colorable.NewColorableStdout(), "", log.LstdFlags)
func init() {
log.SetOutput(logWriter)
}
func (w *LogWriter) Write(data []byte) (n int, err error) {
os.Stdout.Write(data)
return w.MultiLogWriter.Write(data)
}
func (w *MultiLogWriter) Write(data []byte) (n int, err error) {
w.Range(func(k, v interface{}) bool {
n, err = k.(io.Writer).Write(data)
if err != nil {
w.Delete(k)
}
return true
})
return
}
// AddWriter 添加日志输出端
func AddWriter(wn io.Writer) {
logWriter.Store(wn, wn)
}
// MayBeError 优雅错误判断加日志辅助函数
func MayBeError(info error) (hasError bool) {
if hasError = info != nil; hasError {
Print(aurora.Red(info))
}
return
}
func getNoColor(v ...interface{}) (noColor []interface{}) {
noColor = append(noColor, v...)
for i, value := range v {
if vv, ok := value.(aurora.Value); ok {
noColor[i] = vv.Value()
}
}
return
}
// Print 带颜色识别
func Print(v ...interface{}) {
noColor := getNoColor(v...)
colorLogger.Output(2, fmt.Sprint(v...))
multiLogger.Output(2, fmt.Sprint(noColor...))
}
// Printf calls Output to print to the standard logger.
// Arguments are handled in the manner of fmt.Printf.
func Printf(format string, v ...interface{}) {
noColor := getNoColor(v...)
colorLogger.Output(2, fmt.Sprintf(format, v...))
multiLogger.Output(2, fmt.Sprintf(format, noColor...))
}
// Println calls Output to print to the standard logger.
// Arguments are handled in the manner of fmt.Println.
func Println(v ...interface{}) {
noColor := getNoColor(v...)
colorLogger.Output(2, fmt.Sprintln(v...))
multiLogger.Output(2, fmt.Sprintln(noColor...))
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/plugins-gin/engine.git
git@gitee.com:plugins-gin/engine.git
plugins-gin
engine
engine
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891