为什么Go自带的日志默认输出到os.Stderr?


 Note that the Go runtime writes to standard error for panics and crashes; closing Stderr may cause those messages to go elsewhere, perhaps to a file opened later.

os - The Go Programming Language https://golang.org/pkg/os/

Variables

Portable analogs of some common system call errors.

Errors returned from this package may be tested against these errors with errors.Is.

var (
// ErrInvalid indicates an invalid argument.
// Methods on File will return this error when the receiver is nil.
ErrInvalid = errInvalid() // "invalid argument"

ErrPermission = errPermission() // "permission denied"
ErrExist = errExist() // "file already exists"
ErrNotExist = errNotExist() // "file does not exist"
ErrClosed = errClosed() // "file already closed"
ErrNoDeadline = errNoDeadline() // "file type does not support deadline"
ErrDeadlineExceeded = errDeadlineExceeded() // "i/o timeout"
)


Stdin, Stdout, and Stderr are open Files pointing to the standard input, standard output, and standard error file descriptors.

Note that the Go runtime writes to standard error for panics and crashes; closing Stderr may cause those messages to go elsewhere, perhaps to a file opened later.

var (
Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
)


Args hold the command-line arguments, starting with the program name.

var Args []string


proposal: os: Stdin, Stdout and Stderr should be interfaces · Issue #13473 · golang/go https://github.com/golang/go/issues/13473

Replacing os.Stdout/os.Stderr should redirect panic · Issue #325 · golang/go https://github.com/golang/go/issues/325

 

 

 

Capture ​​os.Stdout​​ and/or ​​os.Stderr​​ in Go

go-capturer/main.go at master · zenizh/go-capturer https://github.com/zenizh/go-capturer/blob/master/main.go