-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
78 lines (70 loc) · 1.98 KB
/
main.go
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
package main
import (
"flag"
"io"
"os"
"time"
)
var (
Option_help bool
Option_layout string
Option_buffer_size int
)
func init() {
flag.StringVar(&Option_layout, "layout", "", `Timestamp output format layout, see https://golang.org/pkg/time/#Time.Format, some examples below:"
Default : "2006-01-02 15:04:05.000"
Layout : "01/02 03:04:05PM '06 -0700"
ANSIC : "Mon Jan _2 15:04:05 2006"
UnixDate : "Mon Jan _2 15:04:05 MST 2006"
RubyDate : "Mon Jan 02 15:04:05 -0700 2006"
RFC822 : "02 Jan 06 15:04 MST"
RFC822Z : "02 Jan 06 15:04 -0700"
RFC850 : "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 : "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z : "Mon, 02 Jan 2006 15:04:05 -0700"
RFC3339 : "2006-01-02T15:04:05Z07:00"
RFC3339Nano : "2006-01-02T15:04:05.999999999Z07:00"
Kitchen : "3:04PM"
Stamp : "Jan _2 15:04:05"
StampMilli : "Jan _2 15:04:05.000"
StampMicro : "Jan _2 15:04:05.000000"
StampNano : "Jan _2 15:04:05.000000000"
DateTime : "2006-01-02 15:04:05"
DateOnly : "2006-01-02"
TimeOnly : "15:04:05"`)
flag.IntVar(&Option_buffer_size, "buffer", 8192, "Maximum bytes to read from the pipe per loop")
flag.BoolVar(&Option_help, "help", false, "Usage help")
}
func main() {
flag.Parse()
if Option_help {
flag.Usage()
return
}
if Option_layout == "" {
Option_layout = "2006-01-02 15:04:05.000"
}
if Option_buffer_size < 1024 {
Option_buffer_size = 1024
}
var latestBuffer []byte
for {
tempBuffer := make([]byte, Option_buffer_size)
cnt, err := os.Stdin.Read(tempBuffer[:])
if err != nil && err == io.EOF {
return
}
latestBuffer = append(latestBuffer, tempBuffer[:cnt]...)
beginIndex := 0
for i, char := range latestBuffer[:] {
if char == '\n' || char == '\r' {
os.Stdout.WriteString(time.Now().Format(Option_layout) + " ")
os.Stdout.Write(latestBuffer[beginIndex : i+1])
beginIndex = i + 1
}
}
if beginIndex != 0 {
latestBuffer = latestBuffer[beginIndex:]
}
}
}