Browse Source

并发读nil错针的问题

tags/v1.3.5
liangzy 4 years ago
parent
commit
cd85fd66ff
2 changed files with 26 additions and 5 deletions
  1. +13
    -5
      log.go
  2. +13
    -0
      log_test.go

+ 13
- 5
log.go View File

@@ -14,6 +14,7 @@ var envkey = "CENTER_RUNMODE"
type Logger struct { type Logger struct {
Lable string Lable string
*logs.BeeLogger *logs.BeeLogger
lock sync.RWMutex
} }


func (self *Logger) SetAdapter(level Level, adapter Adapter) *Logger { func (self *Logger) SetAdapter(level Level, adapter Adapter) *Logger {
@@ -34,17 +35,16 @@ func (self *Logger) DropAdapter(adapter Adapter) *Logger {
return self return self
} }


func New(label string, channelLens ...int64) (l *Logger, loaded bool) {
func newLogger(label string, channelLens ...int64) (l *Logger, loaded bool) {
var channellens int64 var channellens int64
var tmp interface{} var tmp interface{}


tmp, loaded = loggers.LoadOrStore(label, new(Logger))
l = tmp.(*Logger)
if len(channelLens) > 0 { if len(channelLens) > 0 {
channellens = channelLens[0] channellens = channelLens[0]
} }


if !loaded {
tmp, loaded = loggers.LoadOrStore(label, func() *Logger {
l := &Logger{BeeLogger: logs.NewLogger(channellens)}
l.Lable = label l.Lable = label
l.BeeLogger = logs.NewLogger(channellens) l.BeeLogger = logs.NewLogger(channellens)
l.BeeLogger.Lable = label l.BeeLogger.Lable = label
@@ -52,10 +52,17 @@ func New(label string, channelLens ...int64) (l *Logger, loaded bool) {
l.SetPrefix(fmt.Sprintf("[env:%s logger:%s]", os.Getenv(envkey), label)) l.SetPrefix(fmt.Sprintf("[env:%s logger:%s]", os.Getenv(envkey), label))
l.EnableFuncCallDepth(true) l.EnableFuncCallDepth(true)
l.SetLogFuncCallDepth(2) l.SetLogFuncCallDepth(2)
}
return l
}())

l = tmp.(*Logger)
return return
} }


func New(label string, channelLens ...int64) (l *Logger, loaded bool) {
return newLogger(label, channelLens...)
}

func Get(label string, channelLens ...int64) (l *Logger) { func Get(label string, channelLens ...int64) (l *Logger) {
var filelevel Level = LevelInfo var filelevel Level = LevelInfo
var loaded bool var loaded bool
@@ -78,6 +85,7 @@ func GetEs(label string, channelLens ...int64) (l *Logger) {


if l, loaded = New(label, channelLens...); !loaded { if l, loaded = New(label, channelLens...); !loaded {
l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterElasticSearch) l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterElasticSearch)
l.lock.Unlock()
} }
return return
} }


+ 13
- 0
log_test.go View File

@@ -59,3 +59,16 @@ func TestDropAdapter(t *testing.T) {
Debug(errors.New("he hello")) Debug(errors.New("he hello"))
CloseAll() CloseAll()
} }

func TestNew(t *testing.T) {
for i := 1; i < 10; i++ {
go func(i int) {
GetEs("ok").Debug("%d", i)
time.Sleep(1 * time.Second)
}(i)
}

for i := 1; i < 10; i++ {
GetEs("ok").Debug("aaaaaa%d", i)
}
}

Loading…
Cancel
Save