Tôi có một ứng dụng Django trên máy chủ Linux. Trong một trong các khung nhìn, một số hình thức của print
lệnh được thực hiện, và một số chuỗi được in. Làm thế nào tôi có thể tìm ra chuỗi in là gì? Có một số bản ghi trong đó những thứ này được lưu giữ không?Mọi thứ diễn ra khi tôi 'in' chúng từ ứng dụng Django của tôi?
Trả lời
Đầ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! :)
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.
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ế.
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.
- 1. Ứng dụng của chúng tôi phá vỡ ứng dụng WCF của chúng tôi
- 2. Lỗi khi nhập pymongo vào ứng dụng django của tôi
- 3. Cách chúng tôi biết nếu ứng dụng của chúng tôi đã gỡ cài đặt từ iphone?
- 4. Mọi người cần gì để chạy ứng dụng của tôi?
- 5. Đầu ra (echo/print) mọi thứ từ một mảng PHP
- 6. Cách ghi nhật ký mọi thứ xảy ra trong phiên trình diễn tương tác với Python?
- 7. Django syncdb không làm bảng cho ứng dụng của tôi
- 8. Tôi làm cách nào để yêu cầu ứng dụng Cocoa của tôi thoát khỏi ứng dụng?
- 9. Chúng tôi có thể mời mọi người sử dụng ứng dụng của chúng tôi hoặc gửi yêu cầu kết bạn từ ứng dụng qua Facebook trong iOS 5 không?
- 10. Mở ứng dụng spotify từ ứng dụng iphone của tôi
- 11. Mở ứng dụng iPod từ trong ứng dụng của tôi?
- 12. Kiểm tra đơn vị khi tải mọi thứ khi chạy ứng dụng với AngularJS
- 13. Làm thế nào tôi có thể sử dụng ORM Django trong ứng dụng Tornado của tôi?
- 14. Làm cách nào để xóa mọi thứ khi tôi đang sử dụng bảng phân cảnh?
- 15. làm mọi thứ với nhiều file khi tải chúng sử dụng nút-đáng gờm với Express
- 16. Bắt đầu nhiều chủ đề và theo dõi chúng từ ứng dụng .NET của tôi
- 17. Newbie in Heroku: Lỗi khi đẩy ứng dụng của tôi vào Heroku
- 18. Điều gì xảy ra với ứng dụng của tôi khi máy Mac của tôi chuyển sang chế độ ngủ?
- 19. Cách diễn dịch "xóa bởi chúng tôi" sau khi git rebase tương tác
- 20. cách mở cửa hàng ứng dụng bằng ứng dụng ipad hoặc iphone của chúng tôi?
- 21. Ứng dụng của tôi đã bị từ chối do UIBackgroundModes
- 22. Mở rộng mẫu là gì và làm cách nào để chúng tôi có thể giảm bớt nếu ứng dụng công cụ ứng dụng google của chúng tôi?
- 23. Làm thế nào để khởi chạy Cài đặt sẵn có ứng dụng từ ứng dụng của chúng tôi?
- 24. grep + A: in tất cả mọi thứ sau khi trận đấu
- 25. Spork gây ra lỗi phương thức không xác định trong ứng dụng Rails của tôi?
- 26. làm thế nào tôi có thể sửa chữa xcode biên dịch mọi thứ mọi lúc?
- 27. Làm cách nào để biên dịch byte mọi thứ trong thư mục .emacs.d của tôi?
- 28. làm thế nào tôi có thể phá vỡ mọi thứ với Fragments với setRetainInstance (true) và thêm chúng vào backstack?
- 29. Từ nơi chúng tôi nhận được diễn viên người gửi khi nhận được một tin nhắn cụ thể?
- 30. Cách sử dụng whatsapp từ ứng dụng Android của tôi?
Đ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
@linkedlinked: Chỉ khi bạn không sử dụng các chỉ thị cấu hình thích hợp. –