diff options
Diffstat (limited to 'cmd/tunneld')
| -rw-r--r-- | cmd/tunneld/main.go | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go index 40d60d8..55783b6 100644 --- a/cmd/tunneld/main.go +++ b/cmd/tunneld/main.go @@ -25,6 +25,7 @@ var ( debugFlag = flag.Bool("d", false, "debug: print time and source info") forceFlag = flag.Bool("f", false, "try start with force") syslogFlag = flag.Bool("s", false, "write log to syslog instead of stdout") + outputFlag = flag.String("o", "", "write log to file instead of stdout") configFlag = flag.String("c", "", "path to configuration file") socketFlag = flag.String("S", "", "path to control socket") versionFlag = flag.Bool("version", false, "print version and exit") @@ -35,22 +36,45 @@ var BuildVersion string const trimSize = 32 func initLog() { - var logFlags int + if *outputFlag != "" && *syslogFlag { + log.Fatal("bad usage: duplicate log write flag") + } - if *debugFlag { - logFlags |= log.Ldate | log.Ltime | log.Lshortfile + if *debugFlag && *syslogFlag { + log.Fatal("bad usage: debug with syslog is out of sense") } - log.SetFlags(logFlags) + if *outputFlag != "" { + const fileFlags = os.O_APPEND | os.O_CREATE | os.O_WRONLY + + f, err := os.OpenFile(*outputFlag, fileFlags, 0644) + if err != nil { + log.Fatalf("log: %s", err) + } + + log.SetOutput(f) + } if *syslogFlag { sysLog, err := syslog.New(syslog.LOG_INFO, "tunneld") if err != nil { - log.Fatal(err) + log.Fatalf("log: %s", err) } log.SetOutput(sysLog) } + + var logFlags int + + if *debugFlag { + logFlags |= log.Ldate | log.Ltime | log.Lshortfile + } + + if *outputFlag != "" { + logFlags |= log.Ldate | log.Ltime + } + + log.SetFlags(logFlags) } func sighandler(c chan os.Signal, s *server.Server) { @@ -314,6 +338,7 @@ func deconfigure(s *server.Server) error { } func main() { + log.SetFlags(0) flag.Parse() if *versionFlag { @@ -323,6 +348,10 @@ func main() { initLog() + if flag.NArg() > 0 { + log.Fatal("bad usage: extra args") + } + socket := getSocketPath() if *forceFlag { if err := os.Remove(socket); err != nil { |
