From log.go:
func (l *Logger) Output(calldepth int, s string) error {
now := time.Now() // get this early.
var file string
var line int
l.mu.Lock()
defer l.mu.Unlock()
// ... Rest omitted
Since pretty much all package log
output functions go through Output
, and there's a mutex in Output
it's safe to say they're concurrency-safe.