You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ne...@apache.org on 2017/04/19 21:32:14 UTC

[3/4] incubator-trafficcontrol git commit: Change TM2 log to Close old on Init

Change TM2 log to Close old on Init

This allows changing the log location on the fly, without having
nightmarish synchronization issues.


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/240043f5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/240043f5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/240043f5

Branch: refs/heads/master
Commit: 240043f56195e10acb6497f659296f2befd39af6
Parents: a7bdd08
Author: Robert Butts <ro...@gmail.com>
Authored: Wed Mar 29 14:23:44 2017 -0600
Committer: David Neuman <da...@gmail.com>
Committed: Wed Apr 19 15:31:43 2017 -0600

----------------------------------------------------------------------
 traffic_monitor_golang/common/log/log.go        | 50 +++++++++++++++-----
 .../traffic_monitor/traffic_monitor.go          | 10 ++--
 2 files changed, 44 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/240043f5/traffic_monitor_golang/common/log/log.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/common/log/log.go b/traffic_monitor_golang/common/log/log.go
index b3b567b..12d3082 100644
--- a/traffic_monitor_golang/common/log/log.go
+++ b/traffic_monitor_golang/common/log/log.go
@@ -28,19 +28,37 @@ import (
 )
 
 var (
-	Debug   *log.Logger
-	Info    *log.Logger
-	Warning *log.Logger
-	Error   *log.Logger
-	Event   *log.Logger
+	Debug       *log.Logger
+	Info        *log.Logger
+	Warning     *log.Logger
+	Error       *log.Logger
+	Event       *log.Logger
+	debugCloser io.Closer
+	infoCloser  io.Closer
+	warnCloser  io.Closer
+	errCloser   io.Closer
+	eventCloser io.Closer
 )
 
-func Init(eventW, errW, warnW, infoW, debugW io.Writer) {
-	Debug = log.New(debugW, "DEBUG: ", log.Lshortfile)
-	Info = log.New(infoW, "INFO: ", log.Lshortfile)
-	Warning = log.New(warnW, "WARNING: ", log.Lshortfile)
-	Error = log.New(errW, "ERROR: ", log.Lshortfile)
-	Event = log.New(eventW, "", 0)
+func initLogger(logger **log.Logger, oldLogCloser *io.Closer, newLogWriter io.WriteCloser, logPrefix string, logFlags int) {
+	if *logger != nil {
+		(*logger).SetOutput(newLogWriter)
+	} else {
+		*logger = log.New(newLogWriter, logPrefix, logFlags)
+	}
+	if *oldLogCloser != nil {
+		(*oldLogCloser).Close()
+	}
+	*oldLogCloser = newLogWriter
+}
+
+// Init initailizes the logs with the given io.WriteClosers. If `Init` was previously called, existing loggers are Closed. If you have loggers which are not Closers or which must not be Closed, wrap them with `log.NopCloser`.
+func Init(eventW, errW, warnW, infoW, debugW io.WriteCloser) {
+	initLogger(&Debug, &debugCloser, debugW, "DEBUG: ", log.Lshortfile)
+	initLogger(&Info, &infoCloser, infoW, "INFO: ", log.Lshortfile)
+	initLogger(&Warning, &warnCloser, warnW, "WARNING: ", log.Lshortfile)
+	initLogger(&Error, &errCloser, errW, "ERROR: ", log.Lshortfile)
+	initLogger(&Event, &eventCloser, eventW, "", 0)
 }
 
 const timeFormat = time.RFC3339Nano
@@ -110,3 +128,13 @@ func Writef(w io.Writer, b []byte, contextFormat string, v ...interface{}) {
 		Errorf(": %v", err)
 	}
 }
+
+type nopCloser struct {
+	io.Writer
+}
+
+func (nopCloser) Close() error { return nil }
+
+func NopCloser(w io.Writer) io.WriteCloser {
+	return nopCloser{w}
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/240043f5/traffic_monitor_golang/traffic_monitor/traffic_monitor.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/traffic_monitor/traffic_monitor.go b/traffic_monitor_golang/traffic_monitor/traffic_monitor.go
index 032b339..fe7dc38 100644
--- a/traffic_monitor_golang/traffic_monitor/traffic_monitor.go
+++ b/traffic_monitor_golang/traffic_monitor/traffic_monitor.go
@@ -40,19 +40,19 @@ var GitRevision = "No Git Revision Specified. Please build with '-X main.GitRevi
 // BuildTimestamp is the time the app was built. The app SHOULD always be built with this set via the `-X` flag.
 var BuildTimestamp = "No Build Timestamp Specified. Please build with '-X main.BuildTimestamp=`date +'%Y-%M-%dT%H:%M:%S'`"
 
-func getLogWriter(location string) (io.Writer, error) {
+func getLogWriter(location string) (io.WriteCloser, error) {
 	switch location {
 	case config.LogLocationStdout:
-		return os.Stdout, nil
+		return log.NopCloser(os.Stdout), nil
 	case config.LogLocationStderr:
-		return os.Stderr, nil
+		return log.NopCloser(os.Stderr), nil
 	case config.LogLocationNull:
-		return ioutil.Discard, nil
+		return log.NopCloser(ioutil.Discard), nil
 	default:
 		return os.OpenFile(location, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
 	}
 }
-func getLogWriters(eventLoc, errLoc, warnLoc, infoLoc, debugLoc string) (io.Writer, io.Writer, io.Writer, io.Writer, io.Writer, error) {
+func getLogWriters(eventLoc, errLoc, warnLoc, infoLoc, debugLoc string) (io.WriteCloser, io.WriteCloser, io.WriteCloser, io.WriteCloser, io.WriteCloser, error) {
 	eventW, err := getLogWriter(eventLoc)
 	if err != nil {
 		return nil, nil, nil, nil, nil, fmt.Errorf("getting log event writer %v: %v", eventLoc, err)