2013-10-28 21 views
35

Từ log.go (việc thực hiện của gói log):Tại sao tôi nên sử dụng log.Println thay vì fmt.Println?

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 chỉ là một wrapper chức năng cho fmt.Sprintln, tại sao tôi nên sử dụng nó thay vì fmt.Println hoặc fmt.Sprintln?

Bất kỳ lý do thực tiễn nào?

Trả lời

52

Hai điều khác nhau:

  1. In ấn qua log gói là an toàn từ goroutines đồng thời (mà đơn giản fmt không phải là)

  2. Log có thể thêm thông tin thời gian tự động.

Vì vậy, đây là hai điều hoàn toàn khác nhau. nhật ký là để ghi nhật ký và fmt để định dạng. (Được rồi, đăng nhập sử dụng cùng một động từ và cờ, nhưng đó chỉ là thuận tiện).

+0

Tôi thích Đăng nhập vì dấu thời gian. Nhược điểm của việc sử dụng Log là nó luôn viết cho stderr. – rem7

+9

@ rem7 nó ghi vào 'os.Stderr' theo mặc định *. Chỉ cần gọi ['log.SetOutput'] (https://golang.org/pkg/log/#SetOutput) để gửi nó tới bất kỳ' io.Writer' nào (có thể là một 'byte.Buffer'). –

+5

Xin vui lòng, bạn có thể thêm ví dụ mã cho 'log là an toàn từ đồng thời goroutines' – bsbak

Các vấn đề liên quan