fix(logx): need to wait for the first caller to complete the execution. (#2213)
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -23,7 +24,7 @@ var (
|
|||||||
disableStat uint32
|
disableStat uint32
|
||||||
options logOptions
|
options logOptions
|
||||||
writer = new(atomicWriter)
|
writer = new(atomicWriter)
|
||||||
setupOnce uint32
|
setupOnce sync.Once
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@@ -206,35 +207,35 @@ func SetWriter(w Writer) {
|
|||||||
// SetUp sets up the logx. If already set up, just return nil.
|
// SetUp sets up the logx. If already set up, just return nil.
|
||||||
// we allow SetUp to be called multiple times, because for example
|
// we allow SetUp to be called multiple times, because for example
|
||||||
// we need to allow different service frameworks to initialize logx respectively.
|
// we need to allow different service frameworks to initialize logx respectively.
|
||||||
func SetUp(c LogConf) error {
|
func SetUp(c LogConf) (err error) {
|
||||||
// Just ignore the subsequent SetUp calls.
|
// Just ignore the subsequent SetUp calls.
|
||||||
// Because multiple services in one process might call SetUp respectively.
|
// Because multiple services in one process might call SetUp respectively.
|
||||||
if !atomic.CompareAndSwapUint32(&setupOnce, 0, 1) {
|
// Need to wait for the first caller to complete the execution.
|
||||||
return nil
|
setupOnce.Do(func() {
|
||||||
}
|
setupLogLevel(c)
|
||||||
|
|
||||||
setupLogLevel(c)
|
if len(c.TimeFormat) > 0 {
|
||||||
|
timeFormat = c.TimeFormat
|
||||||
|
}
|
||||||
|
|
||||||
if len(c.TimeFormat) > 0 {
|
switch c.Encoding {
|
||||||
timeFormat = c.TimeFormat
|
case plainEncoding:
|
||||||
}
|
atomic.StoreUint32(&encoding, plainEncodingType)
|
||||||
|
default:
|
||||||
|
atomic.StoreUint32(&encoding, jsonEncodingType)
|
||||||
|
}
|
||||||
|
|
||||||
switch c.Encoding {
|
switch c.Mode {
|
||||||
case plainEncoding:
|
case fileMode:
|
||||||
atomic.StoreUint32(&encoding, plainEncodingType)
|
err = setupWithFiles(c)
|
||||||
default:
|
case volumeMode:
|
||||||
atomic.StoreUint32(&encoding, jsonEncodingType)
|
err = setupWithVolume(c)
|
||||||
}
|
default:
|
||||||
|
setupWithConsole()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
switch c.Mode {
|
return
|
||||||
case fileMode:
|
|
||||||
return setupWithFiles(c)
|
|
||||||
case volumeMode:
|
|
||||||
return setupWithVolume(c)
|
|
||||||
default:
|
|
||||||
setupWithConsole()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Severe writes v into severe log.
|
// Severe writes v into severe log.
|
||||||
|
|||||||
Reference in New Issue
Block a user