mirror of
https://github.com/mjl-/mox.git
synced 2024-12-25 16:03:48 +03:00
quickstart: write all output to a file "quickstart.log" for later reference
quite some output is printed. you could remember to tee it all to a file. but that's probably often realized only after having run the quickstart. you can also copy/paste it all from the terminal, but that's sometimes annoying to do. writing to a file is more helpful to users. this has been requested a few times in the past on irc/matrix (i forgot who).
This commit is contained in:
parent
35af7e30a6
commit
2255ebcf11
2 changed files with 37 additions and 1 deletions
2
doc.go
2
doc.go
|
@ -146,6 +146,8 @@ Quickstart writes configuration files, prints initial admin and account
|
|||
passwords, DNS records you should create. If you run it on Linux it writes a
|
||||
systemd service file and prints commands to enable and start mox as service.
|
||||
|
||||
All output is written to quickstart.log for later reference.
|
||||
|
||||
The user or uid is optional, defaults to "mox", and is the user or uid/gid mox
|
||||
will run as after initialization.
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import (
|
|||
"encoding/pem"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
"net/url"
|
||||
|
@ -67,6 +68,8 @@ Quickstart writes configuration files, prints initial admin and account
|
|||
passwords, DNS records you should create. If you run it on Linux it writes a
|
||||
systemd service file and prints commands to enable and start mox as service.
|
||||
|
||||
All output is written to quickstart.log for later reference.
|
||||
|
||||
The user or uid is optional, defaults to "mox", and is the user or uid/gid mox
|
||||
will run as after initialization.
|
||||
|
||||
|
@ -105,6 +108,35 @@ output of "mox config describe-domains" and see the output of
|
|||
c.Usage()
|
||||
}
|
||||
|
||||
// Write all output to quickstart.log.
|
||||
logfile, err := os.Create("quickstart.log")
|
||||
xcheckf(err, "creating quickstart.log")
|
||||
|
||||
origStdout := os.Stdout
|
||||
origStderr := os.Stderr
|
||||
piper, pipew, err := os.Pipe()
|
||||
xcheckf(err, "creating pipe for logging to logfile")
|
||||
pipec := make(chan struct{})
|
||||
go func() {
|
||||
io.Copy(io.MultiWriter(origStdout, logfile), piper)
|
||||
close(pipec)
|
||||
}()
|
||||
// A single pipe, so writes to stdout and stderr don't get interleaved.
|
||||
os.Stdout = pipew
|
||||
os.Stderr = pipew
|
||||
logClose := func() {
|
||||
pipew.Close()
|
||||
<-pipec
|
||||
os.Stdout = origStdout
|
||||
os.Stderr = origStderr
|
||||
err := logfile.Close()
|
||||
xcheckf(err, "closing quickstart.log")
|
||||
}
|
||||
defer logClose()
|
||||
log.SetOutput(os.Stdout)
|
||||
fmt.Printf("(output is also written to quickstart.log)\n\n")
|
||||
defer fmt.Printf("\n(output is also written to quickstart.log)\n")
|
||||
|
||||
// We take care to cleanup created files when we error out.
|
||||
// We don't want to get a new user into trouble with half of the files
|
||||
// after encountering an error.
|
||||
|
@ -121,7 +153,9 @@ output of "mox config describe-domains" and see the output of
|
|||
}
|
||||
}
|
||||
|
||||
log.Fatalf(format, args...)
|
||||
log.Printf(format, args...)
|
||||
logClose()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
xwritefile := func(path string, data []byte, perm os.FileMode) {
|
||||
|
|
Loading…
Reference in a new issue