Warum sollte ich log.Println anstelle von fmt.Println verwenden?


76

Aus log.go (der Implementierung des Protokollpakets):

167 // Println calls l.Output to print to the logger.
168 // Arguments are handled in the manner of fmt.Println.
169 func (l *Logger) Println(v ...interface{}) { l.Output(2, fmt.Sprintln(v...)) }

log.Printlnist nur ein Funktions-Wrapper für fmt.Sprintln, warum sollte ich ihn anstelle von fmt.Printlnoder verwenden fmt.Sprintln?

Irgendwelche praktischen Gründe?

Antworten:


106

Zwei Dinge sind unterschiedlich:

  1. Das Drucken über das Paketprotokoll ist vor gleichzeitigen Goroutinen sicher (während dies fmtnicht der Fall ist).

  2. Das Protokoll kann automatisch Zeitinformationen hinzufügen.

Das sind also zwei völlig verschiedene Dinge. Protokoll dient zur Protokollierung und fmtFormatierung. (Okay, log verwendet die gleichen Verben und Flags, aber das ist nur praktisch).


1
Ich mag Log wegen des Zeitstempels. Der Nachteil bei der Verwendung von Log ist, dass es immer in stderr schreibt.
Rem7

16
@ rem7 es meldet sich os.Stderrdurch Standard . Rufen log.SetOutputSie einfach an, um es an einen zu senden io.Writer(der sogar ein sein könnte bytes.Buffer).
Dave C

26
Bitte können Sie Codebeispiel fürlog is safe from concurrent goroutines
bsbak

Diskussionen zur Sicherheit von logund fmtin Goroutinen finden Sie unter stackoverflow.com/questions/14694088/…
z11i
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.