summaryrefslogtreecommitdiff
path: root/reallog.go
blob: 9962329c4dbb300fdb5bded98636f2c20b58d864 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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...)
}