Initial import of pstop v0.0.10
[pstop.git] / lib / log.go
diff --git a/lib/log.go b/lib/log.go
new file mode 100644 (file)
index 0000000..0ae07d4
--- /dev/null
@@ -0,0 +1,48 @@
+// logger - minimal logger shared by everyone
+package lib
+
+import (
+       "log"
+       "os"
+)
+
+// public visible interface
+var Logger *MyLogger
+
+func init() {
+       Logger = new(MyLogger)
+       Logger.EnableLogging(false)
+}
+
+// just add an extra field to enable or not
+type MyLogger struct {
+       logging_enabled bool
+       logger          *log.Logger
+}
+
+func (logger *MyLogger) EnableLogging(enable_logging bool) bool {
+       if logger.logging_enabled == enable_logging {
+               return enable_logging // as nothing to do
+       }
+
+       old_value := logger.logging_enabled
+       logger.logging_enabled = enable_logging
+
+       if enable_logging {
+               logfile := MyName() + ".log"
+
+               file, err := os.OpenFile(logfile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
+               if err != nil {
+                       log.Fatal("Failed to open log file", logfile, ":", err)
+               }
+               logger.logger = log.New(file, "", log.Ldate|log.Ltime|log.Lshortfile)
+       }
+       return old_value
+}
+
+// pass Println() calls downstream if we have a valid logger setup
+func (logger *MyLogger) Println(v ...interface{}) {
+       if logger.logger != nil {
+               logger.logger.Println(v)
+       }
+}