Я пытаюсь записать вывод в файл всякий раз, когда что-то печатаю на консоль. Похоже, не было хороших примеров использования непрерывного потока, а, скорее, чтения одного значения, поэтому я придумал следующий код:
package main
import (
"fmt"
"io"
"os"
)
type ahhh struct {
*os.File
__writer io.Writer
}
func (me *ahhh) Write(b []byte) (n int, err error) {
return me.__writer.Write(b)
}
func write_print_to_file(file_name string) {
file, _ := os.OpenFile(file_name, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
new_stdout := &ahhh{file, io.MultiWriter(file, os.Stdout)}
os.Stdout = new_stdout
}
func main() {
write_print_to_file("output.log")
fmt.Println("Hello world!")
}
По какой-то причине os.Stdout = new_stdout
не хочет работать. Я вполне уверен, что это должно быть разрешенным назначением, поскольку я использую нечто похожее по структуре в моей файловой системе FUSE, поэтому мне любопытно, почему os.Stdout
не хочет принимать мое унаследованное os.File
.
В качестве альтернативы, если это действительно невозможно, есть ли хорошие предложения для создания непрерывного потока данных в файл?