|
|
@@ -9,54 +9,47 @@ import (
|
|
|
"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
|
|
|
mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
|
|
|
"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_msg"
|
|
|
- "gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
|
|
|
)
|
|
|
|
|
|
+var (
|
|
|
+ hassert = helpers.Hassert
|
|
|
+)
|
|
|
+
|
|
|
+// LogBufParam -- параметры логирующего буфера
|
|
|
+type LogBufParam struct {
|
|
|
+ Prefix_ string // Префикс для сообщений
|
|
|
+ IsTerm_ mKs.ISafeBool // Признак вывода в терминал
|
|
|
+}
|
|
|
+
|
|
|
+// SelfCheck -- проверяет корректность параметров.
|
|
|
+func (sf *LogBufParam) SelfCheck() {
|
|
|
+ hassert(sf.IsTerm_ != nil, "LogBufParam.SelfCheck(): IsTerm_==nil")
|
|
|
+}
|
|
|
+
|
|
|
// LogBuf -- потокобезопасный буфер лога.
|
|
|
type LogBuf struct {
|
|
|
sync.RWMutex
|
|
|
- isTerm mKs.ISafeBool // Признак вывода в стандартный поток
|
|
|
- prefix string // Префикс для сообщений
|
|
|
+ *LogBufParam
|
|
|
lst []mKs.ILogMsg
|
|
|
lstErr []mKs.ILogMsg
|
|
|
}
|
|
|
|
|
|
-// OptionLogBuf -- опция для конфигурирования ILogBuf.
|
|
|
-type OptionLogBuf func(logBuf *LogBuf)
|
|
|
-
|
|
|
-// OptIsTerm -- устанавливает признак вывода в терминал.
|
|
|
-func OptIsTerm(isTerm bool) OptionLogBuf {
|
|
|
- return func(sf *LogBuf) {
|
|
|
- if isTerm {
|
|
|
- sf.IsTerm().Set()
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// OptPrefix -- устанавливает префикс в сообщениях.
|
|
|
-func OptPrefix(prefix string) OptionLogBuf {
|
|
|
- return func(sf *LogBuf) {
|
|
|
- sf.prefix = prefix + "."
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
// NewLogBuf -- возвращает новый потокобезопасный буфер лога.
|
|
|
-func NewLogBuf(opts ...OptionLogBuf) mKs.ILogBuf {
|
|
|
+func NewLogBuf(param *LogBufParam) mKs.ILogBuf {
|
|
|
+ hassert(param != nil, "NewLogBuf(): param=nil")
|
|
|
+ param.SelfCheck()
|
|
|
sf := &LogBuf{
|
|
|
- isTerm: safe_bool.NewSafeBool(),
|
|
|
- lst: []mKs.ILogMsg{},
|
|
|
- lstErr: []mKs.ILogMsg{},
|
|
|
- }
|
|
|
-
|
|
|
- for _, opt := range opts {
|
|
|
- opt(sf)
|
|
|
+ LogBufParam: param,
|
|
|
+ lst: []mKs.ILogMsg{},
|
|
|
+ lstErr: []mKs.ILogMsg{},
|
|
|
}
|
|
|
+ sf.Prefix_ += "."
|
|
|
return sf
|
|
|
}
|
|
|
|
|
|
// IsTerm -- возвращает признак логирования.
|
|
|
func (sf *LogBuf) IsTerm() mKs.ISafeBool {
|
|
|
- return sf.isTerm
|
|
|
+ return sf.IsTerm_
|
|
|
}
|
|
|
|
|
|
// GetErr -- возвращает сообщение ошибки по номеру.
|
|
|
@@ -64,7 +57,7 @@ func (sf *LogBuf) GetErr(num int) mKs.ILogMsg {
|
|
|
sf.RLock()
|
|
|
defer sf.RUnlock()
|
|
|
if len(sf.lstErr) == 0 {
|
|
|
- return log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+"not error msg")
|
|
|
+ return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"not error msg")
|
|
|
}
|
|
|
if num >= len(sf.lstErr) {
|
|
|
return sf.lstErr[len(sf.lstErr)-1]
|
|
|
@@ -80,13 +73,13 @@ func (sf *LogBuf) Get(num int) mKs.ILogMsg {
|
|
|
sf.RLock()
|
|
|
defer sf.RUnlock()
|
|
|
if len(sf.lst) == 0 {
|
|
|
- return log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+"*no msg*")
|
|
|
+ return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
|
|
|
}
|
|
|
if num >= len(sf.lst) {
|
|
|
- return log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+"*no msg*")
|
|
|
+ return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
|
|
|
}
|
|
|
if num <= 0 {
|
|
|
- return log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+"*no msg*")
|
|
|
+ return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
|
|
|
}
|
|
|
return sf.lst[num]
|
|
|
}
|
|
|
@@ -105,7 +98,7 @@ func (sf *LogBuf) Debug(fMsg string, args ...any) {
|
|
|
args: args,
|
|
|
}
|
|
|
strMsg := fmt.Sprintf(msg.text, msg.args...)
|
|
|
- _msg := log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+strMsg)
|
|
|
+ _msg := log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+strMsg)
|
|
|
sf.lst = append(sf.lst, _msg)
|
|
|
sf.checkLen()
|
|
|
sf.printTerm(_msg)
|
|
|
@@ -120,7 +113,7 @@ func (sf *LogBuf) Info(fMsg string, args ...any) {
|
|
|
args: args,
|
|
|
}
|
|
|
strMsg := fmt.Sprintf(msg.text, msg.args...)
|
|
|
- _msg := log_msg.NewLogMsg(log_msg.INFO, sf.prefix+strMsg)
|
|
|
+ _msg := log_msg.NewLogMsg(log_msg.INFO, sf.Prefix_+strMsg)
|
|
|
sf.lst = append(sf.lst, _msg)
|
|
|
sf.checkLen()
|
|
|
sf.printTerm(_msg)
|
|
|
@@ -135,7 +128,7 @@ func (sf *LogBuf) Warn(fMsg string, args ...any) {
|
|
|
args: args,
|
|
|
}
|
|
|
strMsg := fmt.Sprintf(msg.text, msg.args...)
|
|
|
- _msg := log_msg.NewLogMsg(log_msg.WARN, sf.prefix+strMsg)
|
|
|
+ _msg := log_msg.NewLogMsg(log_msg.WARN, sf.Prefix_+strMsg)
|
|
|
sf.lst = append(sf.lst, _msg)
|
|
|
sf.checkLen()
|
|
|
sf.printTerm(_msg)
|
|
|
@@ -150,7 +143,7 @@ func (sf *LogBuf) Err(fMsg string, args ...any) {
|
|
|
args: args,
|
|
|
}
|
|
|
strMsg := fmt.Sprintf(msg.text, msg.args...)
|
|
|
- _msg := log_msg.NewLogMsg(log_msg.ERROR, sf.prefix+strMsg)
|
|
|
+ _msg := log_msg.NewLogMsg(log_msg.ERROR, sf.Prefix_+strMsg)
|
|
|
sf.lst = append(sf.lst, _msg)
|
|
|
sf.lstErr = append(sf.lstErr, _msg)
|
|
|
sf.checkLen()
|
|
|
@@ -181,7 +174,7 @@ func (sf *LogBuf) checkLenErr() {
|
|
|
|
|
|
// Печатает сообщение в терминал, если разрешено.
|
|
|
func (sf *LogBuf) printTerm(msg mKs.ILogMsg) {
|
|
|
- if !sf.isTerm.Get() {
|
|
|
+ if !sf.IsTerm_.Get() {
|
|
|
return
|
|
|
}
|
|
|
level := msg.Level()
|