Why should I use log.Println instead of fmt.Println?

24,904

Two things are different:

  1. Printing via package log is safe from concurrent goroutines (while plain fmt isn't)

  2. Log can add timing information automatically.

So these are two completely different things. log is for logging and fmt for formatting. (Okay, log uses the same verbs and flags, but that is just convenient).

Share:
24,904
Salah Eddine Taouririt
Author by

Salah Eddine Taouririt

Updated on July 08, 2022

Comments

  • Salah Eddine Taouririt
    Salah Eddine Taouririt almost 2 years

    From log.go (the implementation of the log package) :

    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.Println is just a function wrapper for fmt.Sprintln , why should I use it instead of fmt.Println or fmt.Sprintln ?

    Any practical reasons ?

  • Naor Shlomi
    Naor Shlomi over 8 years
    I like Log because of the timestamp. The downside to using Log is that it always writes to stderr.
  • Dave C
    Dave C over 8 years
    @rem7 it logs to os.Stderr by default. Simply call log.SetOutput to send it to any io.Writer (which might even be a bytes.Buffer).
  • bsbak
    bsbak about 7 years
    Please, can you add code example for log is safe from concurrent goroutines
  • z11i
    z11i over 4 years
    For discussions around the safety of log and fmt in goroutines, see stackoverflow.com/questions/14694088/…