You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
package logging
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"time"
|
|
|
|
"strconv"
|
|
|
|
)
|
|
|
|
|
|
|
|
func getVerbosity() int {
|
|
|
|
v := os.Getenv("VERBOSE")
|
|
|
|
level := 0
|
|
|
|
if v != "" {
|
|
|
|
var err error
|
|
|
|
level, err = strconv.Atoi(v)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("Invalid Vverboity %v", v)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return level
|
|
|
|
}
|
|
|
|
|
|
|
|
type logTopic string
|
|
|
|
const (
|
|
|
|
// define 4 character topic abbreviations for coloring
|
|
|
|
DError logTopic = "ERRO"
|
|
|
|
DClient logTopic = "CLNT"
|
|
|
|
DStart logTopic = "STRT"
|
|
|
|
DExit logTopic = "EXIT"
|
|
|
|
DPing logTopic = "PING"
|
|
|
|
DScan logTopic = "SCAN"
|
|
|
|
DSpawn logTopic = "SPWN"
|
|
|
|
)
|
|
|
|
// the list can grow
|
|
|
|
|
|
|
|
var debugStart time.Time
|
|
|
|
var debugVerbosity int
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
debugVerbosity = getVerbosity()
|
|
|
|
debugStart = time.Now()
|
|
|
|
if debugVerbosity > 0 {
|
|
|
|
filename := time.Now().Format("01-02T15:04:05")
|
|
|
|
filename += ".log"
|
|
|
|
f, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
log.SetOutput(f)
|
|
|
|
}
|
|
|
|
|
|
|
|
log.SetFlags(log.Flags() &^ (log.Ldate | log.Ltime)) // turns off date and time so we can set manually
|
|
|
|
}
|
|
|
|
|
|
|
|
// example call Debug(dClient, "R%d connecting to client %d", r.Id, c.Id)
|
|
|
|
func Debug(topic logTopic, format string, a ...interface{}) {
|
|
|
|
if debugVerbosity >= 1 {
|
|
|
|
time := time.Since(debugStart).Microseconds()
|
|
|
|
time /= 100
|
|
|
|
prefix := fmt.Sprintf("%06d %v ", time, string(topic))
|
|
|
|
format = prefix + format
|
|
|
|
log.Printf(format, a...)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|