log/扩展Exit功能;

This commit is contained in:
2023-04-25 13:17:10 +08:00
parent 66e4001f0e
commit 850b678c13
3 changed files with 24 additions and 3 deletions

View File

@@ -20,8 +20,9 @@ type entry = Entry
// Logger 中保存了日志所需的全局配置,
// 使用 Logger 处理日志.
type Logger struct {
exit func(code int) // protected by lock
levelProcessors levelProcessors // protected by lock
exit func(code int) // protected by lock
beforeExit []func(code int) // protected by lock
levelProcessors levelProcessors // protected by lock
entry
lock sync.RWMutex
level atomic.Int32
@@ -98,6 +99,7 @@ func (logger *Logger) SetReportStackLevel(level Level) {
func (logger *Logger) Reset() {
logger.lock.Lock()
logger.exit = nil
logger.beforeExit = nil
logger.levelProcessors = levelProcessors{}
logger.lock.Unlock()
@@ -112,9 +114,14 @@ func (logger *Logger) Reset() {
func (logger *Logger) Exit(code int) {
logger.lock.RLock()
exit := logger.exit
beforeExit := make([]func(int), len(logger.beforeExit))
copy(beforeExit, logger.beforeExit)
logger.lock.RUnlock()
for i := len(beforeExit) - 1; i >= 0; i-- {
beforeExit[i](code)
}
if exit == nil {
os.Exit(code)
exit = os.Exit
}
exit(code)
}
@@ -126,6 +133,14 @@ func (logger *Logger) SetExit(fn func(code int)) {
logger.lock.Unlock()
}
// AddBeforeExit 增加 Exit 在调用 SetExit 指定的函数前执行的函数,
// 先增加的后执行.
func (logger *Logger) AddBeforeExit(fn ...func(code int)) {
logger.lock.Lock()
logger.beforeExit = append(logger.beforeExit, fn...)
logger.lock.Unlock()
}
func (logger *Logger) getLevelProcessors(level Level) []EntryProcessor {
logger.lock.RLock()
defer logger.lock.RUnlock()