2010-04-10 45 views
37

Tôi muốn xuất thông điệp gỡ lỗi trong ứng dụng django của tôi tại các điểm khác nhau trong một chức năng xem. Các tài liệu cho các django-debug-toolbar nói rằng nó sử dụng xây dựng trong python đăng nhập nhưng tôi không thể tìm thấy bất kỳ thông tin thêm sau đó. Tôi không thực sự muốn đăng nhập vào một tệp nhưng vào ngăn thông tin trên thanh công cụ. Cái này hoạt động ra sao?Làm cách nào để sử dụng Ghi nhật ký trong Thanh công cụ gỡ lỗi Django?

Trả lời

43

Bạn chỉ cần sử dụng các phương thức logging module và DjDT sẽ chặn và hiển thị chúng trong Bảng ghi nhật ký.

import logging 

logging.debug('Debug Message') 

if some_error: 
    logging.error('Error Message') 
8

Ghi nhật ký thẳng vào trình ghi nhật ký, như @ jonwd7 được đề cập, thường không được khuyến nghị. Nói chung, tôi đang theo mẫu này:

import logging 
logger = logging.getLogger(__name__) 
del logging # To prevent accidentally using it 

... 

logger.debug("Some message") 

Điều này cho phép bạn kiểm soát tốt hơn nhiều so với thông điệp ghi nhật ký và không hiển thị. Thật không may, bằng cách sử dụng nó theo cách này dừng django debug thanh công cụ từ chụp bất kỳ tin nhắn đăng nhập, trừ khi bạn chỉ định một cấu hình đăng nhập cụ thể. Đây là đơn giản nhất tôi có thể đưa ra:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'incremental': True, 
    'root': { 
     'level': 'DEBUG', 
    }, 
} 

Setting "gia tăng" và "disable_existing_loggers" đều quan trọng vì vậy bạn không vô hiệu hóa xử lý các thanh công cụ gắn liền với logger gốc. Tất cả những gì bạn muốn làm là đặt loglevel của logger gốc thành "DEBUG". Bạn cũng có thể sử dụng mục nhập "logger" để thiết lập các mức cho các logger cụ thể. Chỉ cần bỏ qua phần "Trình xử lý" và đặt "tuyên truyền": Đúng để chúng được xử lý bởi trình xử lý DjDT.

+1

Cảm ơn bạn đã đi sâu vào chi tiết với trình ghi nhật ký gốc. Đó là thông tin mà các câu trả lời khác thiếu. – jnns

+1

phần thiết lập đã giúp tôi, cảm ơn! Lời khuyên tốt cho năm 2016 – Jeff

0

Nếu bạn hiện có cấu hình LOGGING dict, và bạn không muốn làm hỏng nó bằng cách chuyển sang 'incremental', bạn sẽ cần phải thêm lại nhật ký DjDT làm trình xử lý, sau đó thêm nó vào danh sách các trình xử lý của trình ghi nhật ký gốc.

from debug_toolbar.panels.logging import collector # needed for handler constructor below 
LOGGING = { 
    # existing options, formatters, loggers, etc 
    handlers = { 
     # existing handlers 
     'djdt_log': { 
      'level': 'DEBUG', 
      'class': 'debug_toolbar.panels.logging.ThreadTrackingHandler', 
      'collector': collector, 
     }, 
    }, 
    'root': { 
     'level': 'DEBUG', 
     'handlers': ['djdt_log'], 
    }, 
} 

Nếu có cách nào để làm điều này, tôi rất muốn xem.

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