]> Cypherpunks.ru repositories - goredo.git/blobdiff - log.go
Simple real-time status messages
[goredo.git] / log.go
diff --git a/log.go b/log.go
index 8669a642f98c1561e50643b01f987f2c09250c57..ebfb39493043b630f6b839ff75d6cecd54c0a91c 100644 (file)
--- a/log.go
+++ b/log.go
@@ -20,12 +20,22 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 package main
 
 import (
+       "flag"
        "fmt"
        "os"
        "strings"
+       "sync"
 )
 
 const (
+       EnvLevel   = "REDO_LEVEL"
+       EnvDebug   = "REDO_DEBUG"
+       EnvLogWait = "REDO_LOG_WAIT"
+       EnvLogLock = "REDO_LOG_LOCK"
+       EnvLogPid  = "REDO_LOG_PID"
+       EnvLogJS   = "REDO_LOG_JS"
+       EnvNoColor = "NO_COLOR"
+
        CReset   = "\033[0m"
        CBold    = "\033[1m"
        CBlack   = "\033[30;1m"
@@ -39,7 +49,7 @@ const (
 
        CDebug = CYellow
        CRedo  = CGreen
-       CDone  = CBlue
+       CWait  = CBlue
        CLock  = CCyan
        CErr   = CRed
        CWarn  = CMagenta
@@ -48,12 +58,21 @@ const (
 )
 
 var (
+       Level   = 0
        NoColor bool
        Debug   bool
-       LogDone bool
+       LogWait bool
        LogLock bool
        LogJS   bool
        MyPid   int
+
+       flagDebug   = flag.Bool("debug", false, fmt.Sprintf("enable debug logging (%s=1)", EnvDebug))
+       flagLogWait = flag.Bool("log-wait", false, fmt.Sprintf("enable wait messages logging (%s=1)", EnvLogWait))
+       flagLogLock = flag.Bool("log-lock", false, fmt.Sprintf("enable lock messages logging (%s=1)", EnvLogLock))
+       flagLogPid  = flag.Bool("log-pid", false, fmt.Sprintf("append PIDs (%s=1)", EnvLogPid))
+       flagLogJS   = flag.Bool("log-js", false, fmt.Sprintf("enable jobserver messages logging (%s=1)", EnvLogJS))
+
+       LogMutex sync.Mutex
 )
 
 func trace(level, format string, args ...interface{}) {
@@ -63,20 +82,22 @@ func trace(level, format string, args ...interface{}) {
        }
        switch level {
        case CNone:
+               LogMutex.Lock()
                os.Stderr.WriteString(StderrPrefix + p + fmt.Sprintf(format+"\n", args...))
+               LogMutex.Unlock()
                return
        case CDebug:
                if !Debug {
                        return
                }
                p += "dbg  "
-       case CRedo:
-               p += "redo "
-       case CDone:
-               if !(LogDone || Debug) {
+       case CWait:
+               if !(LogWait || Debug) {
                        return
                }
-               p += "done "
+               p += "wait "
+       case CRedo:
+               p += "redo "
        case CLock:
                if !(LogLock || Debug) {
                        return
@@ -94,7 +115,9 @@ func trace(level, format string, args ...interface{}) {
        }
        msg := fmt.Sprintf(format, args...)
        msg = StderrPrefix + colourize(level, p+strings.Repeat(". ", Level)+msg)
+       LogMutex.Lock()
        os.Stderr.WriteString(msg + "\n")
+       LogMutex.Unlock()
 }
 
 func colourize(colour, s string) string {