diff --git a/logs/conn.go b/logs/conn.go index c3adaf35..532092d1 100644 --- a/logs/conn.go +++ b/logs/conn.go @@ -65,6 +65,10 @@ func (c *ConnWriter) WriteMsg(msg string, level int) error { return nil } +func (c *ConnWriter) Flush() { + +} + func (c *ConnWriter) Destroy() { if c.innerWriter == nil { return diff --git a/logs/console.go b/logs/console.go index a14afc4a..ed03acde 100644 --- a/logs/console.go +++ b/logs/console.go @@ -42,6 +42,10 @@ func (c *ConsoleWriter) Destroy() { } +func (c *ConsoleWriter) Flush() { + +} + func init() { Register("console", NewConsole) } diff --git a/logs/file.go b/logs/file.go index b63cc8d8..5c354b51 100644 --- a/logs/file.go +++ b/logs/file.go @@ -237,6 +237,10 @@ func (w *FileLogWriter) Destroy() { w.mw.fd.Close() } +func (w *FileLogWriter) Flush() { + w.mw.fd.Sync() +} + func init() { Register("file", NewFileWriter) } diff --git a/logs/log.go b/logs/log.go index 47fa906c..a9254aaa 100644 --- a/logs/log.go +++ b/logs/log.go @@ -20,6 +20,7 @@ type LoggerInterface interface { Init(config string) error WriteMsg(msg string, level int) error Destroy() + Flush() } var adapters = make(map[string]loggerType) @@ -140,8 +141,26 @@ func (bl *BeeLogger) Critical(format string, v ...interface{}) { bl.writerMsg(LevelCritical, msg) } -func (bl *BeeLogger) Close() { +//flush all chan data +func (bl *BeeLogger) Flush() { for _, l := range bl.outputs { + l.Flush() + } +} + +func (bl *BeeLogger) Close() { + for { + if len(bl.msg) > 0 { + bm := <-bl.msg + for _, l := range bl.outputs { + l.WriteMsg(bm.msg, bm.level) + } + } else { + break + } + } + for _, l := range bl.outputs { + l.Flush() l.Destroy() } } diff --git a/logs/smtp.go b/logs/smtp.go index ecc33aa5..0c34d472 100644 --- a/logs/smtp.go +++ b/logs/smtp.go @@ -92,6 +92,9 @@ func (s *SmtpWriter) WriteMsg(msg string, level int) error { return err } +func (s *SmtpWriter) Flush() { + return +} func (s *SmtpWriter) Destroy() { return }