go - 为什么 go 程序将输出打印到终端屏幕而不是/dev/stderr?

标签 go logging

在golang源码中看到 go 会将输出打印到 os.Stderr

Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")

那么为什么我在终端中使用命令 go run main.go 运行这个程序 输出打印到终端屏幕,而不是 /dev/stderr

// main.go
func main() {
    log.Println("this is my first log")
}

最佳答案

在标准的 Unix/Linux 终端中,stdoutstderr 都连接到终端,因此输出到那里。

这里有一个 shell 片段来阐明这一点:

$ echo "joe" >> /dev/stderr
joe

即使我们将“joe”回显到看起来像文件的东西,它也会被发送到屏幕上。将 /dev/stderr 替换为 /tmp/foo,您将不会在屏幕上看到输出(尽管它会附加到文件 /tmp/富)


在 Go 中,您可以通过在其第一个参数中将流传递给 fmt.Fprintf 等函数来具体选择输出到哪个流。

关于go - 为什么 go 程序将输出打印到终端屏幕而不是/dev/stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54494701/

相关文章:

c# - 以松散耦合的方式公开 ILogger

logging - 如何解读windows APPCRASH神秘日志?

docker - 源文件更新了,但是CMD没有反射(reflect)

firebase - Firestore交易-仅在 key 不存在时如何添加。永远不想更新

go - 转到Buffalo : ERRO[0000] Error: name buffalodevn is not allowed,尝试使用其他应用程序名称

go - 如何序列化 [string]reflect.Value 类型的映射?

postgresql - "runtime error: invalid memory address or nil pointer dereference"创建表

logging - ArangoDB FOXX 日志记录 : how to

Python日志记录 - 检查日志文件的位置?

python - 使用Python发送带有输出日志和成功状态的电子邮件