2015-04-18 7 views

risposta

47

Se non si desidera timestamp, basta creare un nuovo log.Logger con flag insieme a 0:

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

EDIT:

è la seguente buona Go ?

os.Stderr.WriteString("Message") 

Questo è accettabile, e si può anche utilizzare fmt.Fprintf e amici per ottenere output formattato:

fmt.Fprintf(os.Stderr, "number of foo: %d", nFoo) 
+0

quale strada è meglio lo stile del codice? –

+6

Se stai per utilizzare stderr per registrare effettivamente le cose, usa un logger. Altrimenti, un semplice 'os.Stderr.WriteString' sarà sufficiente, IMO. –

36

Usando il pacchetto fmt, è possibile scegliere di scrivere a stderr questo modo:

import "fmt" 
import "os" 

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

os.Stderr è un io.Writer, quindi Puoi usarlo in qualsiasi funzione che accetti uno io.Writer. Ecco alcuni esempi:

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

tutto dipende da come esattamente avete la stringa che si desidera stampare (ad esempio se si desidera formattare in primo luogo, se si dispone come un io.Reader, se lo avete come una fetta di byte ...). E ci possono essere molti più modi.

2

Per impostazione predefinita, i flag del registratore sono impostati su Ldate | Ltime. È possibile modificare il formato di data logger per uno dei seguenti (dalle 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 

Per esempio, bandiere LDate | Ltime (o LstdFlags) produce,

2009/01/23 01:23:23 message 

Mentre le bandiere Ldate | Ltime | Lmicrosecondi | Llongfile produrre,

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

è anche possibile impostare il logger di default per non stampare nulla impostando il flag a 0:

log.SetFlags(0)