-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.go
80 lines (66 loc) · 1.63 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
79
80
package main
import (
"gopkg.in/alecthomas/kingpin.v2"
"log"
"os"
"strings"
"sync"
)
var (
stdoutFile = kingpin.Flag("stdout-log", "stdout log name").Default("stdout.log").String()
stderrFile = kingpin.Flag("stderr-log", "stderr log name").Default("stderr.log").String()
mergeLog = kingpin.Flag("merge-log", "stdout and stderr write to same file").Bool()
logDir = kingpin.Flag("logdir", "log directory location").PlaceHolder("$TMPDIR").Default(os.TempDir()).String()
fileMode = kingpin.Flag("file-mode", "file permission").Default("0644").String()
fileSize = kingpin.Flag("file-size", "rotate file size").Default("10485760").Int()
fileNum = kingpin.Flag("file-num", "number of files").Default("20").Int()
args = kingpin.Arg("args", "command").Strings()
)
func main() {
kingpin.Version("0.1.2")
kingpin.Parse()
if *fileNum < 1 {
log.Fatal("Invalid --file-num")
}
mu := new(sync.Mutex)
fout := file{
dir: *logDir,
name: *stdoutFile,
mode: *fileMode,
num: int64(*fileNum),
size: int64(*fileSize),
mu: mu,
}
fpOut, fpOutErr := fout.openFile()
if fpOutErr != nil {
log.Fatal(fpOutErr)
}
defer fout.Close()
fout.fp = fpOut
c := command{
args: strings.Join(*args, " "),
}
if !*mergeLog {
ferr := file{
dir: *logDir,
name: *stderrFile,
mode: *fileMode,
num: int64(*fileNum),
size: int64(*fileSize),
mu: mu,
}
fpErr, fpErrErr := ferr.openFile()
if fpErrErr != nil {
log.Fatal(fpErrErr)
}
defer ferr.Close()
ferr.fp = fpErr
c.stderrLog = ferr
}
c.stdoutLog = fout
exitCode, cerr := c.runCommand()
if cerr != nil {
log.Fatal(cerr)
}
os.Exit(exitCode)
}