|
|
|
|
@ -33,7 +33,7 @@ import (
|
|
|
|
|
|
|
|
|
|
type (
|
|
|
|
|
|
|
|
|
|
Manager struct {
|
|
|
|
|
LoggerManager struct {
|
|
|
|
|
sync.RWMutex
|
|
|
|
|
EntryFilters
|
|
|
|
|
EntryExtenders
|
|
|
|
|
@ -49,22 +49,22 @@ type (
|
|
|
|
|
count int
|
|
|
|
|
|
|
|
|
|
logErrors bool
|
|
|
|
|
errors errs.ErrorList
|
|
|
|
|
onErrorFn ManagerErrorFnc
|
|
|
|
|
onFatalFn ManagerEntryFnc
|
|
|
|
|
errors errs.ErrorList
|
|
|
|
|
|
|
|
|
|
onErrorFn LoggerManagerErrorFnc
|
|
|
|
|
onFatalFn LoggerManagerEntryFnc
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ManagerFnc func(manager *Manager)
|
|
|
|
|
LoggerManagerFnc func(manager *LoggerManager)
|
|
|
|
|
|
|
|
|
|
ManagerErrorFnc func(manager *Manager, err error)
|
|
|
|
|
LoggerManagerErrorFnc func(manager *LoggerManager, err error)
|
|
|
|
|
|
|
|
|
|
ManagerEntryFnc func(manager *Manager, entry *Entry)
|
|
|
|
|
LoggerManagerEntryFnc func(manager *LoggerManager, entry *Entry)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func NewManager(name string, level Level, options ...ManagerFnc) *Manager {
|
|
|
|
|
l := &Manager{
|
|
|
|
|
func NewLoggerManager(name string, level Level, options ...LoggerManagerFnc) *LoggerManager {
|
|
|
|
|
l := &LoggerManager{
|
|
|
|
|
EntryFilters: *NewEntryFilters(),
|
|
|
|
|
level : level,
|
|
|
|
|
state : StateCreated,
|
|
|
|
|
@ -79,23 +79,23 @@ func NewManager(name string, level Level, options ...ManagerFnc) *Manager {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Name() string {
|
|
|
|
|
func (l *LoggerManager) Name() string {
|
|
|
|
|
return l.name }
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Level() Level {
|
|
|
|
|
func (l *LoggerManager) Level() Level {
|
|
|
|
|
l.RLock()
|
|
|
|
|
lv := l.level
|
|
|
|
|
l.RUnlock()
|
|
|
|
|
return lv
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Manager) SetLevel (level Level) {
|
|
|
|
|
func (l *LoggerManager) SetLevel (level Level) {
|
|
|
|
|
l.Lock()
|
|
|
|
|
l.level = level
|
|
|
|
|
l.Unlock()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Manager) State () State {
|
|
|
|
|
func (l *LoggerManager) State () State {
|
|
|
|
|
l.RLock()
|
|
|
|
|
s := l.state
|
|
|
|
|
l.RUnlock()
|
|
|
|
|
@ -103,7 +103,7 @@ func (l *Manager) State () State {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Errors () errs.ErrorList {
|
|
|
|
|
func (l *LoggerManager) Errors () errs.ErrorList {
|
|
|
|
|
l.RLock()
|
|
|
|
|
ls := l.errors
|
|
|
|
|
l.RUnlock()
|
|
|
|
|
@ -112,7 +112,7 @@ func (l *Manager) Errors () errs.ErrorList {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Start (all bool) error {
|
|
|
|
|
func (l *LoggerManager) Start (all bool) error {
|
|
|
|
|
l.Lock()
|
|
|
|
|
if l.state == StateStarted {
|
|
|
|
|
l.Unlock()
|
|
|
|
|
@ -132,7 +132,7 @@ func (l *Manager) Start (all bool) error {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Stop (all bool) error {
|
|
|
|
|
func (l *LoggerManager) Stop (all bool) error {
|
|
|
|
|
l.Lock()
|
|
|
|
|
if l.state != StateStarted {
|
|
|
|
|
l.Unlock()
|
|
|
|
|
@ -150,14 +150,14 @@ func (l *Manager) Stop (all bool) error {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Flush () error {
|
|
|
|
|
func (l *LoggerManager) Flush () error {
|
|
|
|
|
l.Lock()
|
|
|
|
|
return l.doCores(nil,func(c *LoggerCore,_ *Entry) error { return c.Flush() }, G.FmtMsgLogFlushErr,true)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) GetCore (name string) *LoggerCore {
|
|
|
|
|
func (l *LoggerManager) GetCore (name string) *LoggerCore {
|
|
|
|
|
l.RLock()
|
|
|
|
|
var co *LoggerCore
|
|
|
|
|
if p := l.findCore(name); p != -1 {
|
|
|
|
|
@ -167,7 +167,7 @@ func (l *Manager) GetCore (name string) *LoggerCore {
|
|
|
|
|
return co
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Manager) AddCore (core *LoggerCore) error {
|
|
|
|
|
func (l *LoggerManager) AddCore (core *LoggerCore) error {
|
|
|
|
|
l.Lock()
|
|
|
|
|
if p := l.findCore(core.name); p != -1 {
|
|
|
|
|
l.Unlock()
|
|
|
|
|
@ -182,7 +182,7 @@ func (l *Manager) AddCore (core *LoggerCore) error {
|
|
|
|
|
return er
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Manager) DelCore (name string) error {
|
|
|
|
|
func (l *LoggerManager) DelCore (name string) error {
|
|
|
|
|
l.Lock()
|
|
|
|
|
p := l.findCore(name)
|
|
|
|
|
if p != -1 {
|
|
|
|
|
@ -198,8 +198,9 @@ func (l *Manager) DelCore (name string) error {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) GetScope(name string) *LoggerScope {
|
|
|
|
|
ns := strings.Split(strings.ToLower(name),g.scopeSepStr)
|
|
|
|
|
func (l *LoggerManager) GetScope(name string) *LoggerScope {
|
|
|
|
|
ns := strings.Split(G.ScopeNameTransforms.Transform(name),g.scopeSepStr)
|
|
|
|
|
|
|
|
|
|
l.RLock()
|
|
|
|
|
sc := l.scopes.getScope(ns[0])
|
|
|
|
|
if sc != nil && len(ns) > 1 {
|
|
|
|
|
@ -209,9 +210,10 @@ func (l *Manager) GetScope(name string) *LoggerScope {
|
|
|
|
|
return sc
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Manager) AddScope(name string, options ...LoggerScopeFnc) (*LoggerScope,error) {
|
|
|
|
|
nm := strings.ToLower(name)
|
|
|
|
|
func (l *LoggerManager) AddScope(name string, options ...LoggerScopeFnc) (*LoggerScope,error) {
|
|
|
|
|
nm := G.ScopeNameTransforms.Transform(name)
|
|
|
|
|
ns := strings.Split(nm,g.scopeSepStr)
|
|
|
|
|
|
|
|
|
|
l.Lock()
|
|
|
|
|
sc := l.scopes.getScope(ns[0])
|
|
|
|
|
if sc == nil {
|
|
|
|
|
@ -232,31 +234,31 @@ func (l *Manager) AddScope(name string, options ...LoggerScopeFnc) (*LoggerScope
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Fatal (msg string, err error, ops ...EntryFnc){
|
|
|
|
|
func (l *LoggerManager) Fatal (msg string, err error, ops ...EntryFnc){
|
|
|
|
|
l.log(LevelFatal,msg,err,ops) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Error (msg string, err error, ops ...EntryFnc){
|
|
|
|
|
func (l *LoggerManager) Error (msg string, err error, ops ...EntryFnc){
|
|
|
|
|
l.log(LevelError,msg,err,ops) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Warn (msg string, ops ...EntryFnc){
|
|
|
|
|
func (l *LoggerManager) Warn (msg string, ops ...EntryFnc){
|
|
|
|
|
l.log(LevelWarn,msg,nil,ops) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Info (msg string, ops ...EntryFnc){
|
|
|
|
|
func (l *LoggerManager) Info (msg string, ops ...EntryFnc){
|
|
|
|
|
l.log(LevelInfo,msg,nil,ops) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Debug (msg string, ops ...EntryFnc){
|
|
|
|
|
func (l *LoggerManager) Debug (msg string, ops ...EntryFnc){
|
|
|
|
|
l.log(LevelDebug,msg,nil,ops) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Data (msg string, data any, ops ...EntryFnc){
|
|
|
|
|
func (l *LoggerManager) Data (msg string, data any, ops ...EntryFnc){
|
|
|
|
|
l.log(LevelData,msg,nil,[]EntryFnc{EntryWithData(data,ops...)}) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) Log (entry *Entry) error {
|
|
|
|
|
func (l *LoggerManager) Log (entry *Entry) error {
|
|
|
|
|
if entry == nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
@ -279,7 +281,7 @@ func (l *Manager) Log (entry *Entry) error {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) log (level Level, msg string, err error,options []EntryFnc) {
|
|
|
|
|
func (l *LoggerManager) log (level Level, msg string, err error,options []EntryFnc) {
|
|
|
|
|
l.Lock()
|
|
|
|
|
if l.state != StateStarted || !l.level.Has(level){
|
|
|
|
|
l.Unlock()
|
|
|
|
|
@ -297,7 +299,7 @@ func (l *Manager) log (level Level, msg string, err error,options []EntryFnc) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) handleError (err error, entry *Entry) {
|
|
|
|
|
func (l *LoggerManager) handleError (err error, entry *Entry) {
|
|
|
|
|
if err == nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
@ -314,7 +316,7 @@ func (l *Manager) handleError (err error, entry *Entry) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) enqueue() {
|
|
|
|
|
func (l *LoggerManager) enqueue() {
|
|
|
|
|
for en := l.queue.Pop(); en != nil; {
|
|
|
|
|
_ = l.doCores(en,func(c *LoggerCore, e *Entry) error { return c.Append(e) },G.FmtMsgLogLogErr,true)
|
|
|
|
|
ReleaseEntry(en)
|
|
|
|
|
@ -322,7 +324,7 @@ func (l *Manager) enqueue() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (l *Manager) doCores (entry *Entry, doFn func(c *LoggerCore, e *Entry) error, msg string, unlock bool) error {
|
|
|
|
|
func (l *LoggerManager) doCores (entry *Entry, doFn func(c *LoggerCore, e *Entry) error, msg string, unlock bool) error {
|
|
|
|
|
var el errs.ErrorList
|
|
|
|
|
for _,co := range l.cores {
|
|
|
|
|
if er := doFn(co,entry); er != nil {
|
|
|
|
|
@ -346,7 +348,7 @@ func (l *Manager) doCores (entry *Entry, doFn func(c *LoggerCore, e *Entry) erro
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Manager) findCore(name string) int {
|
|
|
|
|
func (l *LoggerManager) findCore(name string) int {
|
|
|
|
|
for i :=0; i < len(l.cores); i++ {
|
|
|
|
|
if l.cores[i].name == name {
|
|
|
|
|
return i
|
|
|
|
|
@ -356,3 +358,27 @@ func (l *Manager) findCore(name string) int {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func LoggerManagerWithFilters (configFilters EntryFiltersFnc) LoggerManagerFnc {
|
|
|
|
|
return func(a *LoggerManager) {
|
|
|
|
|
configFilters(&a.EntryFilters) } }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func LoggerManagerWithOnFatal (onFatal LoggerManagerEntryFnc) LoggerManagerFnc {
|
|
|
|
|
return func(a *LoggerManager) {
|
|
|
|
|
a.onFatalFn = onFatal } }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func LoggerManagerWithOnError (onError LoggerManagerErrorFnc) LoggerManagerFnc {
|
|
|
|
|
return func(a *LoggerManager) {
|
|
|
|
|
a.onErrorFn = onError } }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func LoggerManagerWithExtender (extender ...EntryExtender) LoggerManagerFnc {
|
|
|
|
|
return func(a *LoggerManager) {
|
|
|
|
|
a.EntryExtenders = append(a.EntryExtenders,extender...) } }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func LoggerManagerWithErrors (extender ...EntryExtender) LoggerManagerFnc {
|
|
|
|
|
return func(a *LoggerManager) {
|
|
|
|
|
|
|
|
|
|
} }
|