如何在不使用日志的情况下在Go中打印到Stderr

Max*_*ber 55 error-handling go

如何在不使用的情况下向Stderr写入消息log

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

以下是好的Go?

os.Stderr.WriteString("Message")

Ain*_*r-G 79

如果你不想时间戳,只需要创建一个新的log.Loggerflag设置为0:

l := log.New(os.Stderr, "", 0)
l.Println("log msg")
Run Code Online (Sandbox Code Playgroud)

编辑:

以下是好的Go?

os.Stderr.WriteString("Message")
Run Code Online (Sandbox Code Playgroud)

这是可以接受的,你也可以fmt.Fprintf和朋友一起使用格式化输出:

fmt.Fprintf(os.Stderr, "number of foo: %d", nFoo)
Run Code Online (Sandbox Code Playgroud)

  • 如果您打算使用stderr实际记录内容,请使用记录器.否则,一个简单的`os.Stderr.WriteString`就足够了,IMO. (7认同)

jul*_*enc 58

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

import "fmt"
import "os"

func main() {
    fmt.Fprintln(os.Stderr, "hello world")
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案 (2认同)

小智 24

Go 内置函数printprintln打印到 stderr。因此,如果您只是想将一些文本输出到 stderr,您可以这样做

package main

func main() {
    println("Hello stderr!")
}
Run Code Online (Sandbox Code Playgroud)

文档:https : //golang.org/pkg/builtin/#print

  • 好提示!然而,它说:“打印对于引导和调试很有用;**它不能保证保留在语言中。**”所以可能不适合长期项目? (2认同)
  • IMO,`print` 和 `println` 用于调试。 (2认同)

cd1*_*cd1 12

os.Stderr是一个io.Writer,所以你可以在任何接受的函数中使用它io.Writer.这里有一些例子:

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

这一切都取决于你想要打印的字符串的确切程度(例如,如果你想要将它格式化io.Reader,如果你将它作为一个字节切片,那么它就是一个.).而且还有很多方法.


Gus*_*s E 5

默认情况下,记录器标志设置为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
Run Code Online (Sandbox Code Playgroud)

例如,标志Ldate | Ltime(或LstdFlags)产生,

2009/01/23 01:23:23 message
Run Code Online (Sandbox Code Playgroud)

而标志Ldate | Ltime | Lmicroseconds | Llongfile生产,

2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Run Code Online (Sandbox Code Playgroud)

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

log.SetFlags(0)
Run Code Online (Sandbox Code Playgroud)