129 lines
2.4 KiB
Go
129 lines
2.4 KiB
Go
package log
|
|
|
|
// implements 'daemon' mode so switches to fmt
|
|
// instead of log so that timestamps are not printed twice
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
reallog "log"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func DaemonMode(b bool) {
|
|
daemonMode = b
|
|
}
|
|
|
|
var captureMode io.Writer
|
|
|
|
func CaptureMode(w io.Writer) {
|
|
captureMode = w
|
|
}
|
|
|
|
var flusher http.Flusher
|
|
|
|
func HttpMode(w http.ResponseWriter) {
|
|
var ok bool
|
|
httpMode = w
|
|
if w == nil {
|
|
flusher = nil
|
|
return
|
|
}
|
|
flusher, ok = w.(http.Flusher)
|
|
if !ok {
|
|
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
|
|
flusher = nil
|
|
return
|
|
}
|
|
}
|
|
|
|
func DaemonShow() bool {
|
|
if daemonMode {
|
|
fmt.Println("daemonMode=true")
|
|
return true
|
|
} else {
|
|
fmt.Println("daemonMode=false")
|
|
return false
|
|
}
|
|
}
|
|
|
|
func realPrintln(a ...any) {
|
|
if daemonMode {
|
|
// in daemon mode, don't put timestamps on each line
|
|
if captureMode == nil {
|
|
fmt.Println(a...)
|
|
} else {
|
|
fmt.Fprintln(captureMode, a...)
|
|
}
|
|
} else {
|
|
// put timestamps on each line
|
|
if captureMode == nil {
|
|
reallog.Println(a...)
|
|
} else {
|
|
// TODO: add datestamp
|
|
fmt.Fprintln(captureMode, a...)
|
|
}
|
|
}
|
|
if httpMode != nil {
|
|
now := time.Now()
|
|
timestamp := now.Format("2006/01/02 15:04:05") // bummer. other date doesn't work?
|
|
s := timestamp + " " + fmt.Sprint(a...)
|
|
fmt.Fprintln(httpMode, s)
|
|
if flusher != nil {
|
|
flusher.Flush() // Flush the data to the client
|
|
}
|
|
}
|
|
}
|
|
|
|
func realPrintf(s string, a ...any) {
|
|
if daemonMode {
|
|
// in daemon mode, don't put timestamps on each line
|
|
if captureMode == nil {
|
|
fmt.Printf(s, a...)
|
|
} else {
|
|
fmt.Fprintf(captureMode, s, a...)
|
|
}
|
|
} else {
|
|
// put timestamps on each line
|
|
if captureMode == nil {
|
|
reallog.Printf(s, a...)
|
|
} else {
|
|
fmt.Fprintf(captureMode, s, a...)
|
|
}
|
|
}
|
|
if httpMode != nil {
|
|
now := time.Now()
|
|
timestamp := now.Format("2006/01/02 15:04:05") // bummer. other date doesn't work?
|
|
s := timestamp + " " + fmt.Sprintf(s, a...)
|
|
fmt.Fprintln(httpMode, s)
|
|
if flusher != nil {
|
|
flusher.Flush() // Flush the data to the client
|
|
}
|
|
}
|
|
}
|
|
|
|
func realSprint(a ...any) string {
|
|
return fmt.Sprint(a...)
|
|
}
|
|
|
|
func realSprintf(s string, a ...any) string {
|
|
return fmt.Sprintf(s, a...)
|
|
}
|
|
|
|
func realSprintln(a ...any) string {
|
|
return fmt.Sprintln(a...)
|
|
}
|
|
|
|
func realFatalln(a ...any) {
|
|
reallog.Fatalln(a...)
|
|
}
|
|
|
|
func realFatalf(s string, a ...any) {
|
|
reallog.Fatalf(s, a...)
|
|
}
|
|
|
|
func realFatal(s string, a ...any) {
|
|
reallog.Fatalf(s, a...)
|
|
}
|