【发布时间】:2015-06-25 14:49:58
【问题描述】:
如何在不使用log 的情况下向 Stderr 写入消息?
A comment in this SO post 展示了如何使用log:log.Println("Message"),但是如果我不想要时间戳怎么办?
下面的Go好不好?
os.Stderr.WriteString("Message")
【问题讨论】:
标签: error-handling go
如何在不使用log 的情况下向 Stderr 写入消息?
A comment in this SO post 展示了如何使用log:log.Println("Message"),但是如果我不想要时间戳怎么办?
下面的Go好不好?
os.Stderr.WriteString("Message")
【问题讨论】:
标签: error-handling go
如果您不想要时间戳,只需创建一个新的log.Logger 并将flag 设置为0:
l := log.New(os.Stderr, "", 0)
l.Println("log msg")
编辑:
下面的Go好不好?
os.Stderr.WriteString("Message")
这个可以接受,也可以使用fmt.Fprintf和朋友获取格式化输出:
fmt.Fprintf(os.Stderr, "number of foo: %d", nFoo)
【讨论】:
os.Stderr.WriteString 就足够了,IMO。
使用fmt包,你可以选择这样写stderr:
import "fmt"
import "os"
func main() {
fmt.Fprintln(os.Stderr, "hello world")
}
【讨论】:
默认情况下,记录器标志设置为Ldate | Ltime。您可以将记录器格式更改为以下任何一种(来自golang log documentation):
Ldate = 1 << iota // the date in the local time zone: 2009/01/23
Ltime // the time in the local time zone: 01:23:23
Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime.
Llongfile // full file name and line number: /a/b/c/d.go:23
Lshortfile // final file name element and line number: d.go:23. overrides Llongfile
LUTC // if Ldate or Ltime is set, use UTC rather than the local time zone
LstdFlags = Ldate | Ltime // initial values for the standard logger
例如,标志 Ldate | Ltime(或 LstdFlags)产生,
2009/01/23 01:23:23 message
虽然标记 Ldate |伦敦时间 | L微秒 | Llongfile 生成,
2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
您还可以通过将标志设置为 0 来设置默认记录器不打印任何内容:
log.SetFlags(0)
【讨论】:
使用SetOutput函数,设置输出流到os.Stdout
import (
"log"
"os"
)
func init() {
log.SetOutput(os.Stdout)
}
func main() {
log.Println("Gene Story SNP File Storage Server Started.")
}
【讨论】:
Go 内置函数 print 和 println 打印到标准错误。因此,如果您只是想将一些文本输出到 stderr,您可以这样做
package main
func main() {
println("Hello stderr!")
}
【讨论】:
print 和 println 用于调试。
println 打印到STDERR。不过,默认情况下似乎不会打印到 STDERR。 go run ./main.go 2>/dev/null 3>/dev/null 扔掉 STDERR,我仍然得到一个“Hello stderr!”信息。这意味着它正在打印到 STDOUT。我认为@julienc answer fmt.Fprintln(os.Stderr, "Hello stderr!") 也应该是公认的答案。
| grep 'DEBUG' 和2>。不知何故,在使用2> 时,我仍然在终端上获得标准错误输出。
stderr。请考虑一下:somecommand 2>/dev/null |grep 'DEBUG' 2>/dev/null 以便将 grep 错误发送到 /dev/null 以及 somecommand 错误