代码拉取完成,页面将自动刷新
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...))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。