From 508ce2bcf32875c74f2d2304efcb34665a2632d0 Mon Sep 17 00:00:00 2001 From: Colin Sullivan Date: Tue, 13 Mar 2018 19:08:45 -0600 Subject: [PATCH] implement io.Closer interface in the logger --- logger/log.go | 13 +++++++------ server/log.go | 13 ++++++++----- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/logger/log.go b/logger/log.go index 260c1404..2a8b737f 100644 --- a/logger/log.go +++ b/logger/log.go @@ -78,14 +78,15 @@ func NewFileLogger(filename string, time, debug, trace, pid bool) *Logger { return l } -// Close cleans up any resources with the server's logger implementation. -func (l *Logger) Close() { - if l.logFile != nil { - if err := l.logFile.Close(); err != nil { - l.Noticef("couldn't close log file on restart: %v", err) - } +// Close implements the io.Closer interface to clean up +// resources in the server's logger implementation. +// Caller must ensure threadsafety. +func (l *Logger) Close() error { + if f := l.logFile; f != nil { l.logFile = nil + return f.Close() } + return nil } // Generate the pid prefix string diff --git a/server/log.go b/server/log.go index f6fb8564..5b816b04 100644 --- a/server/log.go +++ b/server/log.go @@ -3,6 +3,7 @@ package server import ( + "io" "os" "sync/atomic" @@ -78,11 +79,13 @@ func (s *Server) SetLogger(logger Logger, debugFlag, traceFlag bool) { } s.logging.Lock() if s.logging.logger != nil { - // if we are the server's logger, call its Close function, but check - // the type because this could be a logger from another process - // embedding the NATS server, a SysLogger, or a dummy test logger. - if l, ok := s.logging.logger.(*srvlog.Logger); ok { - l.Close() + // Check to see if the logger implements io.Closer. This could be a + // logger from another process embedding the NATS server or a dummy + // test logger that may not implement that interface. + if l, ok := s.logging.logger.(io.Closer); ok { + if err := l.Close(); err != nil { + s.Noticef("error closing logger: %v", err) + } } } s.logging.logger = logger