Redirect os.Stderr in Go
This is an example Go program which indicates how to redirect
os.Stderr
.
package main import ( "fmt" "os" ) func main() { newstderr, err := os.Create("rs.txt") if err != nil { fmt.Fprintf(os.Stderr, "Error %s\n", err) os.Exit(1) } defer newstderr.Close() os.Stderr.Close() os.Stderr = newstderr fmt.Fprintf(newstderr, "He'll think about paint, and he'll think about glue\n") fmt.Fprintf(os.Stderr, "What a jolly boring thing to do\n") }
The output of the example looks like this:
He'll think about paint, and he'll think about glue What a jolly boring thing to do
Redirecting the output of log
However, this doesn't redirect the output of log
, which
apparently copies os.Stderr
at initialisation. To redirect the
output of log
, you need to use log.SetOutput
.
package main import ( "fmt" "log" "os" ) func main() { newstderr, err := os.Create("rslog.txt") if err != nil { fmt.Fprintf(os.Stderr, "Error %s\n", err) os.Exit(1) } defer newstderr.Close() log.SetOutput(newstderr) log.Fatal("Andy Warhol, silver screen, can't tell them apart at all") }
This puts the output of log.Fatal
into the file
rslog.txt
.
Redirecting the output of panic
Incidentally, there is absolutely no way whatsoever within the Go
language to redirect the output of panic
, so you absolutely
must write your own recover
routine, otherwise the output will
go to whatever the operating system's standard error is, completely
regardless of the value of os.Stderr
. This is by design.
Copyright © Ben Bullock 2009-2024. All
rights reserved.
For comments, questions, and corrections, please email
Ben Bullock
(benkasminbullock@gmail.com).
/
Privacy /
Disclaimer