web-dev-qa-db-fra.com

Comment puis-je imprimer sur Stderr in Go sans utiliser le journal

Comment puis-je écrire un message à Stderr sans utiliser log?

Un commentaire dans ce SO post montre comment le faire avec log: log.Println("Message"), mais que se passe-t-il si je ne veux pas d'horodatage?

Les bons suivants vont-ils?

os.Stderr.WriteString("Message")

50
Max Heiber

Si vous ne voulez pas d’horodatage, créez simplement un nouveau log.Logger avec flag réglé sur 0:

l := log.New(os.Stderr, "", 0)
l.Println("log msg")

MODIFIER:

Est-ce que le bon suivant va?

os.Stderr.WriteString("Message")

Ceci est acceptable et vous pouvez également utiliser fmt.Fprintf et des amis pour obtenir une sortie formatée:

fmt.Fprintf(os.Stderr, "number of foo: %d", nFoo)
70
Ainar-G

En utilisant le paquetage fmt, vous pouvez choisir d'écrire dans stderr de cette façon:

import "fmt"
import "os"

func main() {
    fmt.Fprintln(os.Stderr, "hello world")
}
53
julienc

os.Stderr est un io.Writer , vous pouvez donc l'utiliser dans toute fonction qui accepte un io.Writer. Voici quelques exemples:

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

Tout dépend de la nature exacte de la chaîne que vous voulez imprimer (par exemple, si vous voulez la formater d’abord, si vous l’avez sous la forme io.Reader , si vous l’avez sous la forme d’une tranche d’octets ...). Et il peut y avoir beaucoup plus de moyens.

12
cd1

Par défaut, les indicateurs de l’enregistreur sont définis sur Ldate | Ltime. Vous pouvez modifier le format de l’enregistreur comme suit (à partir de la documentation du journal 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

Par exemple, flags Ldate | Ltime (ou LstdFlags) produit,

2009/01/23 01:23:23 message

Alors que les drapeaux Ldate | Ltime | Microsecondes | Produits de Llongfile,

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

Vous pouvez également configurer le consignateur par défaut pour qu'il n'imprime rien en définissant l'indicateur sur 0:

log.SetFlags(0)
5
Gus E

utilisez la fonction SetOutput, définissez le flux de sortie sur os.Stdout

import (
    "log"
    "os"
)

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

func main() {
    log.Println("Gene Story SNP File Storage Server Started.")
}
0
Max