Wie kann ich eine Nachricht an Stderr schreiben, ohne sie zu verwenden log
?
Ein Kommentar in diesem SO-Beitrag zeigt, wie es geht log
: log.Println("Message")
aber was ist, wenn ich keinen Zeitstempel möchte?
Ist das folgende gute Go?
os.Stderr.WriteString("Message")
error-handling
go
Max Heiber
quelle
quelle
print
undprintln
werden zum Debuggen verwendet.Wenn Sie keine Zeitstempel möchten, erstellen Sie einfach einen neuen
log.Logger
mit derflag
Einstellung0
:l := log.New(os.Stderr, "", 0) l.Println("log msg")
BEARBEITEN:
Dies ist akzeptabel, und Sie können auch
fmt.Fprintf
und friends verwenden, um eine formatierte Ausgabe zu erhalten:fmt.Fprintf(os.Stderr, "number of foo: %d", nFoo)
quelle
os.Stderr.WriteString
, IMO.Mit dem
fmt
Paket können Sie folgendermaßen schreibenstderr
:import "fmt" import "os" func main() { fmt.Fprintln(os.Stderr, "hello world") }
quelle
os.Stderr
ist einio.Writer
, so dass Sie es in jeder Funktion verwenden können, die ein akzeptiertio.Writer
. Hier einige Beispiele:str := "Message" fmt.Fprintln(os.Stderr, str) io.WriteString(os.Stderr, str) io.Copy(os.Stderr, bytes.NewBufferString(str)) os.Stderr.Write([]byte(str))
Es hängt alles davon ab, wie genau Sie die Zeichenfolge haben, die Sie drucken möchten (dh wenn Sie sie zuerst formatieren möchten, wenn Sie sie als haben
io.Reader
, wenn Sie sie als Byte-Slice haben ...). Und es kann noch viel mehr Möglichkeiten geben.quelle
Standardmäßig sind die Logger-Flags auf gesetzt
Ldate | Ltime
. Sie können das Logger-Format wie folgt ändern (aus der Golang-Protokolldokumentation ):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
Zum Beispiel markiert Ldate | Ltime (oder LstdFlags) produzieren,
2009/01/23 01:23:23 message
Während Flags Ldate | Ltime | Mikrosekunden | Llongfile produzieren,
2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Sie können den Standardlogger auch so einstellen, dass nichts gedruckt wird, indem Sie das Flag auf 0 setzen:
log.SetFlags(0)
quelle
Verwenden Sie die SetOutput-Funktion und setzen Sie den Ausgabestream auf os.Stdout
import ( "log" "os" ) func init() { log.SetOutput(os.Stdout) } func main() { log.Println("Gene Story SNP File Storage Server Started.") }
quelle