2013-01-18 51 views
13

Phương pháp để biết nơi lưu trữ các câu lệnh đăng nhập bằng Python là gì?Ghi nhật ký bằng Python - kiểm tra vị trí của tệp nhật ký?

ví dụ: nếu tôi làm:

import logging 
log = logging.getLogger(__name__) 
log.info('Test') 

tôi có thể tìm ra logfile ở đâu? Ngoài ra, khi tôi gọi:

logging.getLogger(__name__) 

Bằng cách nào đó có liên quan đến cách trình ghi nhật ký hoạt động/lưu không?

Trả lời

12

Mô-đun logging sử dụng trình xử lý được gắn với trình ghi nhật ký để quyết định cách thức, vị trí hoặc thậm chí nếu thông báo cuối cùng được lưu trữ hoặc hiển thị. Bạn có thể định cấu hình logging theo mặc định để ghi vào tệp. Bạn thực sự nên đọc số docs, nhưng nếu bạn gọi logging.basicConfig(filename=log_file_name) trong đó log_file_name là tên của tệp bạn muốn thư được viết tới (lưu ý rằng bạn phải làm điều này trước khi bất kỳ điều gì khác trong số logging được gọi), thì tất cả thư đã đăng nhập vào tất cả logger (trừ khi một số cấu hình lại tiếp theo xảy ra sau này) sẽ được viết ở đó. Hãy nhận biết mức logger được đặt là gì; nếu bộ nhớ phục vụ, info thấp hơn mức nhật ký mặc định, vì vậy, bạn phải bao gồm level=logging.INFO trong các đối số đến basicConfig để tin nhắn của bạn kết thúc trong tệp.

Đối với phần khác của câu hỏi, logging.getLogger(some_string) trả về đối tượng Logger, được chèn vào đúng vị trí trong cấu trúc phân cấp từ trình ghi nhật ký gốc, với tên là giá trị some_string. Được gọi không có đối số, nó trả về trình ghi nhật ký gốc. __name__ trả về tên của mô-đun hiện tại, vì vậy logging.getLogger(__name__) trả về đối tượng Logger với tên được đặt thành tên của mô-đun hiện tại. Đây là một mẫu phổ biến được sử dụng với logging, vì nó làm cho cấu trúc trình ghi chép phản ánh cấu trúc mô-đun của mã của bạn, thường làm cho thông điệp ghi nhật ký hữu ích hơn nhiều khi gỡ lỗi.

0

Để tìm vị trí logfile, hãy thử instantiating đối tượng log của bạn trong một vỏ Python trong môi trường của bạn và nhìn vào giá trị của:

log.handlers[0].stream

3

Để có được vị trí nhật ký của một logger tập tin đơn giản, hãy thử

logging.getLoggerClass().root.handlers[0].baseFilename 
Các vấn đề liên quan