Trong python, tại sao sử dụng ghi nhật ký thay vì in?


92

Để gỡ lỗi đơn giản trong một dự án phức tạp, có lý do gì để sử dụng trình ghi python thay vì in không? Còn các trường hợp sử dụng khác thì sao? Có trường hợp sử dụng tốt nhất nào được chấp nhận cho mỗi trường hợp (đặc biệt là khi bạn chỉ tìm kiếm stdout) không?

Tôi luôn nghe nói rằng đây là "phương pháp hay nhất" nhưng tôi không thể tìm ra lý do tại sao.


3
Đối với các dự án lớn, ghi nhật ký luôn là "phương pháp hay nhất" vì bạn có thể dễ dàng bật hoặc tắt tính năng này và nhận được nhiều thông tin hơn. bản in không cung cấp những lợi thế này.
Chris Eberle


3
Tôi không nghĩ rằng có bao giờ một trường hợp sử dụng tốt nhất cho print.
SingleNegationElimination

4
Các tài liệu hướng dẫn khai thác gỗ trăn cho biết trường hợp sử dụng tốt nhất cho printlà để hiển thị thông báo trợ giúp cho người sử dụng trong một ứng dụng dòng lệnh.
slushy,

Đọc tất cả những câu trả lời này, tôi muốn đặt câu hỏi ngược lại: có bao giờ lý do để không sử dụng ghi nhật ký không?
information_interchange

Câu trả lời:


101

Gói ghi nhật ký có rất nhiều tính năng hữu ích:

  • Dễ dàng biết được ở đâu và khi nào (ngay cả dòng số) một cuộc gọi ghi nhật ký đang được thực hiện từ đâu.
  • Bạn có thể đăng nhập vào tệp, ổ cắm, khá nhiều thứ, tất cả cùng một lúc.
  • Bạn có thể phân biệt việc ghi nhật ký của mình dựa trên mức độ nghiêm trọng.

Bản in không có bất kỳ cái nào trong số này.

Ngoài ra, nếu dự án của bạn được nhập bằng các công cụ python khác, thì thực tế không tốt cho gói của bạn là in những thứ ra stdout, vì người dùng có thể sẽ không biết các thông báo in đến từ đâu. Với việc ghi nhật ký, người dùng gói của bạn có thể chọn xem họ có muốn gửi thông báo ghi nhật ký từ công cụ của bạn hay không.


2
Nói rất hay. Đôi khi tôi sẽ sử dụng print khi gỡ lỗi một đoạn script mà tôi định chạy chính xác một lần, nhưng bất kỳ mã nào mà người khác từng nhìn thấy hoặc có nghĩa là kéo dài hơn một ngày sẽ bị ghi lại.
TimothyAWiseman

22

Một trong những lợi thế lớn nhất của việc ghi nhật ký thích hợp là bạn có thể phân loại thư và bật hoặc tắt chúng tùy thuộc vào những gì bạn cần. Ví dụ: có thể hữu ích khi bật thông báo mức gỡ lỗi cho một phần nhất định của dự án, nhưng giảm âm thanh cho các phần khác, để không bị quá tải thông tin chiếm lấy và dễ dàng tập trung vào nhiệm vụ mà bạn cần khai thác gỗ.

Ngoài ra, các bản ghi có thể định cấu hình. Bạn có thể dễ dàng lọc chúng, gửi chúng vào tệp, định dạng chúng, thêm dấu thời gian và bất kỳ thứ gì khác mà bạn có thể cần trên cơ sở toàn cầu. Báo cáo in không dễ dàng quản lý.


3
Chắc chắn +1 để gửi đầu ra cho tệp. Phân tích cú pháp một tệp nhật ký trong quá trình khám nghiệm tử thi tốt hơn nhiều so với việc phải làm cho tệp đó bị hỏng một lần nữa trong cửa sổ bảng điều khiển đang mở để tìm lỗi. Về cơ bản, một trình ghi nhật ký là lý tưởng cho bất kỳ lúc nào bạn cần gỡ lỗi tập lệnh sau khi nó bị lỗi hơn là trong khi nó không thành công. Nó cũng lý tưởng cho bất kỳ lúc nào bạn phải gỡ lỗi một vấn đề phức tạp đòi hỏi bạn phải phân tích đầu ra của chương trình. Về cơ bản, bất cứ khi nào bạn gặp các lỗi phức tạp hơn như lỗi cú pháp, trình ghi nhật ký có thể sẽ đơn giản hóa điều đó cho bạn.
Jonathanb

11

Báo cáo in là loại tồi tệ nhất của cả hai thế giới , kết hợp các khía cạnh tiêu cực của trình gỡ lỗi trực tuyến với công cụ chẩn đoán. Bạn phải sửa đổi chương trình nhưng bạn không nhận được nhiều hơn, mã hữu ích từ nó.

Trình gỡ lỗi trực tuyến cho phép bạn kiểm tra trạng thái của một chương trình đang chạy; Nhưng điều tốt đẹp về một trình gỡ lỗi thực sự là bạn không phải sửa đổi nguồn; cả trước và sau phiên gỡ lỗi; Bạn chỉ cần tải chương trình vào trình gỡ lỗi, nói với trình gỡ lỗi nơi bạn muốn xem và bạn đã sẵn sàng.

Việc tạo công cụ cho ứng dụng có thể mất một số công việc, sửa đổi mã nguồn theo một cách nào đó, nhưng kết quả chẩn đoán kết quả có thể có rất nhiều chi tiết và có thể được bật hoặc tắt ở một mức độ rất cụ thể. Mô-đun ghi nhật ký python không chỉ có thể hiển thị thông báo được ghi nhật ký mà còn hiển thị tệp và chức năng đã gọi nó, theo dõi lại nếu có, thời gian thực mà thông báo được phát ra, v.v. Nhiều hơn thế; thiết bị chẩn đoán không bao giờ cần được loại bỏ; Nó chỉ hợp lệ và hữu ích khi chương trình kết thúc và đang trong quá trình sản xuất giống như ngày nó được thêm vào; nhưng nó có thể có đầu ra của nó bị kẹt trong một tệp nhật ký mà nó không có khả năng làm phiền bất kỳ ai, hoặc mức nhật ký có thể bị giảm xuống để giữ tất cả trừ các thông báo khẩn cấp nhất.

dự đoán nhu cầu hoặc việc sử dụng trình gỡ lỗi thực sự không khó hơn việc sử dụng ipython trong khi bạn đang thử nghiệm và làm quen với các lệnh mà nó sử dụng để điều khiển trình gỡ lỗi pdb tích hợp sẵn.

Khi bạn nghĩ rằng một câu lệnh in có thể dễ dàng hơn so với việc sử dụng pdb (như thường lệ), bạn sẽ thấy rằng việc sử dụng trình ghi nhật ký kéo chương trình của bạn ở trạng thái dễ dàng hơn nhiều so với việc bạn sử dụng và sau đó xóa các câu lệnh in .

Tôi đã định cấu hình trình soạn thảo của mình để đánh dấu các câu lệnh in dưới dạng lỗi cú pháp và ghi các câu lệnh dưới dạng nhận xét, vì đó là cách tôi coi chúng.


4

Nếu bạn sử dụng ghi nhật ký thì người chịu trách nhiệm triển khai có thể định cấu hình trình ghi nhật ký để gửi nó đến một vị trí tùy chỉnh, với thông tin tùy chỉnh. Nếu bạn chỉ in, thì đó là tất cả những gì họ nhận được.


1

Việc ghi nhật ký về cơ bản tạo ra một cơ sở dữ liệu văn bản thuần túy có thể tìm kiếm được của các đầu ra in với các siêu dữ liệu khác (dấu thời gian, cấp độ log, số dòng, quy trình, v.v.).

Đây là vàng nguyên chất, tôi có thể chạy egrep qua tệp nhật ký sau khi tập lệnh python đã chạy. Tôi có thể điều chỉnh tìm kiếm mẫu ví dụ của mình để chọn chính xác những gì tôi quan tâm và bỏ qua phần còn lại. Việc giảm tải nhận thức và tự do chọn mẫu ví dụ của tôi sau này bằng cách thử và sai là lợi ích chính cho tôi.

tail -f mylogfile.log | egrep "key_word1|key_word2"

Bây giờ hãy ném vào những thứ thú vị khác mà bản in không thể làm được (gửi tới socket, đặt mức gỡ lỗi, logrotate, thêm dữ liệu meta, v.v.), bạn có mọi lý do để thích ghi nhật ký hơn các câu lệnh in đơn giản.

Tôi có xu hướng sử dụng các câu lệnh in vì nó lười biếng và dễ dàng, việc thêm ghi nhật ký cần một số mã đĩa của lò hơi, này chúng ta có yasnippets (emacs) và ultisnips (vim) và các công cụ tạo khuôn mẫu khác, vậy tại sao lại từ bỏ việc ghi nhật ký cho các câu lệnh in đơn giản !?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.