2010-07-05 31 views

Trả lời

4

Đầu ra phải ở đầu cuối, nơi bắt đầu django. (nếu bạn không bắt đầu trực tiếp, tôi không tin có cách để đọc nó)

Khi liên kết được chỉ ra, tốt nhất là không sử dụng print, vì điều này có thể gây ra Ngoại lệ! Nhưng đó không phải là lý do duy nhất: Có các mô-đun (như logging) được thực hiện cho các mục đích như vậy và chúng có nhiều tùy chọn hơn.

This site (ngay cả khi đó là từ năm 2008) khẳng định báo cáo của tôi:

Nếu bạn muốn biết những gì đang xảy ra bên trong một cái nhìn, cách nhanh nhất là để thả trong một tuyên bố in. Máy chủ phát triển xuất ra bất kỳ câu lệnh in nào trực tiếp đến thiết bị đầu cuối; đó là thay thế phía máy chủ đối với cảnh báo JavaScript().

Nếu bạn muốn có một chút phức tạp hơn bằng cách ghi nhật ký, bạn nên chuyển sang mô-đun ghi nhật ký của Python (một phần của thư viện chuẩn). Bạn có thể cấu hình nó trong settings.py của bạn: đây ông mô tả, phải làm gì (nhìn trên trang web)

Để gỡ lỗi-mục đích bạn cũng có thể cho phép các debug-mode hoặc sử dụng django-debug-toolbar.

Hy vọng điều đó sẽ hữu ích! :)

+0

Điều này là chính xác. Ngoài ra, nếu bạn đang sử dụng apache để máy chủ các tập tin, tôi biết rằng mod_wsgi ném một lỗi không thể phục hồi mỗi khi bạn nhấn một tuyên bố 'in'; ví dụ. nếu bạn làm 'in 'công việc đã hoàn thành OK!" trong ứng dụng của bạn, kịch bản của bạn sẽ chết (uncaught exception) tại dòng này khi bạn đặt nó trên Apache. Vì lý do này, tôi tránh sử dụng In trong ứng dụng django của mình bằng mọi giá. – linked

+0

@linkedlinked: Chỉ khi bạn không sử dụng các chỉ thị cấu hình thích hợp. –

1

Bản in hiển thị tốt với "./manage.py runserver" hoặc các biến thể khác - như đề cập của Joschua, nó xuất hiện trong thiết bị đầu cuối nơi bạn khởi động. Nếu bạn đang chạy FCGI từ cron hoặc như vậy, mà chỉ bị đổ vào hư vô và bạn mất nó hoàn toàn.

Đối với những nơi tôi muốn "in" như cảnh báo hoặc thông báo xuất hiện, tôi sử dụng một thể hiện của nhật ký python đẩy vào syslog để nắm bắt đầu ra và đặt nó ở đâu đó. Tôi nhanh chóng một thể hiện của khai thác gỗ tại một trong những mô-đun như nó được nạp - models.py là nơi tôi đã chọn, chỉ cho sự thuận tiện của nó và tôi biết nó sẽ luôn luôn nhận được đánh giá trước khi yêu cầu đến cán trong

import logging, logging.handlers 

logger = logging.getLogger("djangosyslog") 
hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON) 
formatter = logging.Formatter('%(filename)s: %(levelname)s: %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 

. sau đó, khi bạn muốn gọi một thông điệp tới logger trong quan điểm của bạn hoặc bất cứ điều gì:

logger = logging.getLogger("djangosyslog") 
logging.warning("Protocol problem: %s", "connection reset", extra=d) 

có .error(), .critical(), và nhiều hơn nữa - kiểm tra http://docs.python.org/library/logging.html cho mọi chi tiết.

Thanh công cụ gỡ lỗi của Rob Hudson là tuyệt vời nếu bạn đang tìm kiếm thông tin gỡ lỗi đó - tôi thường xuyên sử dụng thông tin đó để phát triển. Nó cung cấp cho bạn dữ liệu về yêu cầu và phản hồi hiện tại, bao gồm SQL được sử dụng để tạo ra bất kỳ trang cụ thể nào. Bạn có thể tiêm vào dữ liệu đó như một bản in bằng cách đẩy các chuỗi mà bạn quan tâm vào ngữ cảnh/phản hồi - nhưng tôi thấy rằng có một chút khó khăn để giải quyết.

0

Cảnh báo: nếu bạn cố gắng triển khai mã với các câu lệnh in trong WSGI, hãy chờ đợi những điều cần phá vỡ. Sử dụng mô-đun đăng nhập để thay thế.

2

Không bao giờ sử dụng in, như khi bạn triển khai, nó sẽ in thành chế độ xuất chuẩn và WGSI sẽ ngắt.

Sử dụng ghi nhật ký . Đối với mục đích phát triển, thực sự dễ cài đặt. Trên dự án của bạn __init__.py:

import logging 
from django.conf import settings 

fmt = getattr(settings, 'LOG_FORMAT', None) 
lvl = getattr(settings, 'LOG_LEVEL', logging.DEBUG) 

logging.basicConfig(format=fmt, level=lvl) 
logging.debug("Logging started on %s for %s" % (logging.root.name, logging.getLevelName(lvl))) 

Bây giờ mọi thứ bạn đăng nhập sẽ trở thành stderr, trong trường hợp này là thiết bị đầu cuối của bạn.

logging.debug("Oh hai!") 

Thêm vào đó bạn có thể kiểm soát tính cách rườm rà trên bạn settings.py với một khung cảnh LOG_LEVEL.

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