2012-06-19 25 views
44

Tôi muốn sử dụng đầu ra của pprint để hiển thị cấu trúc dữ liệu phức tạp, nhưng tôi muốn xuất nó bằng mô-đun ghi nhật ký thay vì stdout.Sử dụng tính năng ghi nhật ký in đầu ra của pprint

ds = [{'hello': 'there'}] 
logging.debug(pprint.pprint(ds)) # outputs as STDOUT 
+5

hãy bận tâm để đọc các tài liệu trước đặt câu hỏi như thế này. Nó ở ngay đó. Ngoài ra, bạn nên chấp nhận thêm câu trả lời. –

+0

tôi liếc qua các tài liệu và tìm thấy 'pprint ({}, stream)', nhưng thấy nó khá khó xử. tôi đã có thể nghĩ một cái gì đó giống như 'spprint' có thể đã đẹp hơn' pformat' (như trong 'c'). – yee379

+3

'pprint.pformat()' nằm trên trang đó. –

Trả lời

93

Sử dụng pprint.pformat để nhận chuỗi và sau đó gửi đến khung đăng nhập của bạn.

from pprint import pprint, pformat 
ds = [{'hello': 'there'}] 
logging.debug(pformat(ds)) 
+0

cảm ơn bạn đã phản hồi nhanh! – yee379

+4

Nếu bạn không xóa mã này sau khi đã hoàn tất gỡ lỗi, bạn có thể nên bảo vệ nó bằng "nếu Logger.isEnabledFor (logging.DEBUG):" để tránh chạy pformat khi bạn không sử dụng kết quả của nó: http://docs.python.org/2/library/logging.html#logging.Logger.isEnabledFor –

+0

@EdBrannin Pformat có thêm nhiều chi phí mà nó đáng để gặp rắc rối khi thêm các điều kiện vào tất cả các câu lệnh log DEBUG không? – undefinedvariable

9

Các giải pháp trên không khá cắt nó đối với tôi vì tôi cũng đang sử dụng một định dạng để thêm tên và levelname khi đăng nhập. Có vẻ một chút lộn xộn:

__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa', 
'bbbbbbbbbbbbbbbbbbbb', 
'cccccccccccccccccccc', 
'dddddddddddddddddddd'] 
__main__ : DEBUG : Some other logging text 

Có thể có một giải pháp thanh lịch hơn, nhưng điều này:

for line in pprint.pformat(ds).split('\n'): 
    logging.debug(line) 

sản xuất một chút gì đó đẹp hơn:

__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa', 
__main__ : DEBUG : 'bbbbbbbbbbbbbbbbbbbb', 
__main__ : DEBUG : 'cccccccccccccccccccc', 
__main__ : DEBUG : 'dddddddddddddddddddd'] 
__main__ : DEBUG : Some other logging text 
+4

Nicer cho con người tiêu thụ. Không tuyệt vời như vậy nếu bạn đang vận chuyển các bản ghi để logstash hoặc các công cụ tương tự, và muốn có một Một thông báo đa dòng được gửi đi, tốt, một thông báo –

+0

có cách nào để in đẹp ở mức xử lý/trình định dạng của cấu hình trình ghi nhật ký không? Có vẻ như một trường hợp sử dụng hợp lệ để in đẹp lên bàn điều khiển, nhưng không được định dạng thành tệp –

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