错误处理-如何在不使用日志的情况下在Go中打印到Stderr

如何不使用os.Stderr.WriteString("Message")向Stderr写消息?

在此SO帖子中的评论显示了如何使用os.Stderr.WriteString("Message")576:log.Println("Message"),但是如果我不想要时间戳怎么办?

以下是好的Go吗?

os.Stderr.WriteString("Message")

Max Heiber asked 2019-11-08T16:46:38Z
5个解决方案
79 votes

如果您不希望使用时间戳记,则只需创建一个新的os.Stderr.WriteString("Message") ,并将os.Stderr.WriteString("Message") 设置为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)
Ainar-G answered 2019-11-08T16:47:16Z
58 votes

使用fmt软件包,您可以选择以这种方式写入stderr

import "fmt"
import "os"

func main() {
    fmt.Fprintln(os.Stderr, "hello world")
}
julienc answered 2019-11-08T16:47:46Z
12 votes

io.Readerio.Reader,因此您可以在接受io.Reader的任何函数中使用它。以下是一些示例:

str := "Message"
fmt.Fprintln(os.Stderr, str)
io.WriteString(os.Stderr, str)
io.Copy(os.Stderr, bytes.NewBufferString(str))
os.Stderr.Write([]byte(str))

这完全取决于您要打印的字符串的精确度(即是否要首先格式化它,是否将其作为io.Reader,是否将其作为字节片...)。 还有更多的方法。

cd1 answered 2019-11-08T16:48:29Z
5 votes

默认情况下,记录器标志设置为Ldate | Ltime。您可以将记录器格式更改为以下任何一种格式(来自golang日志文档):

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

虽然标志日期| 时间| 微秒| Llongfile产生,

2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message

您还可以通过将标志设置为0,将默认记录器设置为不打印任何内容:

log.SetFlags(0)
Gus E answered 2019-11-08T16:49:17Z
-1 votes

使用SetOutput函数,将输出流设置为os.Stdout

import (
    "log"
    "os"
)

func init() {
    log.SetOutput(os.Stdout)
}

func main() {
    log.Println("Gene Story SNP File Storage Server Started.")
}
Max answered 2019-11-08T16:49:46Z
translate from https://stackoverflow.com:/questions/29721449/how-can-i-print-to-stderr-in-go-without-using-log