代码拉取完成,页面将自动刷新
package serial
import (
"os"
"sync/atomic"
"log"
)
// 内部调试实现
type logger struct {
provider LogProvider
// has log output enabled,
// 1: enable
// 0: disable
has uint32
}
// newLogger new logger with prefix
func newLogger(prefix string) logger {
return logger{
provider: defaultLogger{log.New(os.Stdout, prefix, log.LstdFlags)},
has: 0,
}
}
// LogMode set enable or disable log output when you has set logger
func (sf *logger) LogMode(enable bool) {
if enable {
atomic.StoreUint32(&sf.has, 1)
} else {
atomic.StoreUint32(&sf.has, 0)
}
}
// SetLogProvider overwrite log provider
func (sf *logger) SetLogProvider(p LogProvider) {
if p != nil {
sf.provider = p
}
}
// Error Log ERROR level message.
func (sf logger) Error(format string, v ...interface{}) {
if atomic.LoadUint32(&sf.has) == 1 {
sf.provider.Error(format, v...)
}
}
// Debug Log DEBUG level message.
func (sf logger) Debug(format string, v ...interface{}) {
if atomic.LoadUint32(&sf.has) == 1 {
sf.provider.Debug(format, v...)
}
}
// default log
type defaultLogger struct {
*log.Logger
}
// check implement LogProvider interface
var _ LogProvider = (*defaultLogger)(nil)
// Error Log ERROR level message.
func (sf defaultLogger) Error(format string, v ...interface{}) {
sf.Printf("[E]: "+format, v...)
}
// Debug Log DEBUG level message.
func (sf defaultLogger) Debug(format string, v ...interface{}) {
sf.Printf("[D]: "+format, v...)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。