Jadi, ketika bermain dengan pengembangan saya hanya dapat mengatur settings.DEBUG
ke True
dan jika terjadi kesalahan saya bisa melihatnya diformat dengan baik, dengan jejak tumpukan yang baik dan meminta informasi.
Tetapi pada jenis situs produksi saya lebih suka menggunakan DEBUG=False
dan menunjukkan kepada pengunjung beberapa halaman kesalahan standar 500 dengan informasi yang sedang saya kerjakan untuk memperbaiki bug ini pada saat ini;)
Pada saat yang sama saya ingin memiliki beberapa cara untuk masuk semua informasi tersebut (susun jejak dan minta info) ke file di server saya - jadi saya bisa menampilkannya ke konsol saya dan menonton kesalahan gulir, email log ke saya setiap jam atau sesuatu seperti ini.
Solusi logging apa yang akan Anda rekomendasikan untuk situs django, yang akan memenuhi persyaratan sederhana itu? Saya memiliki aplikasi yang berjalan sebagai fcgi
server dan saya menggunakan server web apache sebagai frontend (walaupun berpikir untuk pergi ke lighttpd).
sumber
Jawaban:
Nah, kapan
DEBUG = False
, Django akan secara otomatis mengirimkan traceback penuh dari setiap kesalahan ke setiap orang yang tercantum dalamADMINS
pengaturan, yang membuat Anda mendapatkan pemberitahuan secara gratis. Jika Anda ingin lebih banyak kontrol berbutir halus, Anda dapat menulis dan menambahkan ke kelas pengaturan kelas middleware Anda yang mendefinisikan metode bernamaprocess_exception()
, yang akan memiliki akses ke pengecualian yang dimunculkan:http://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception
process_exception()
Metode Anda kemudian dapat melakukan apa pun jenis pencatatan yang Anda inginkan: menulis ke konsol, menulis ke file, dll., Dll.Sunting: meskipun sedikit kurang berguna, Anda juga dapat mendengarkan
got_request_exception
sinyal, yang akan dikirim setiap kali ada pengecualian selama pemrosesan permintaan:http://docs.djangoproject.com/en/dev/ref/signals/#got-request-exception
Namun, ini tidak memberi Anda akses ke objek pengecualian, sehingga metode middleware jauh lebih mudah digunakan.
sumber
logging.exception('Some message')
dengan modul logging standar python berfungsi dengan baik di pengendali utama untukgot_request_exception
, jika semua yang Anda ingin lakukan adalah keluar dari tumpukan jejak. Dengan kata lain, traceback masih tersedia digot_request_exception
.Django Sentry adalah cara yang baik untuk pergi, seperti yang telah disebutkan, tetapi ada sedikit pekerjaan yang terlibat dalam pengaturannya dengan benar (sebagai situs web terpisah). Jika Anda hanya ingin mencatat semuanya ke file teks sederhana di sini adalah konfigurasi logging untuk dimasukkan ke dalam file Anda
settings.py
sumber
'include_html': True
TIDAK hanya membuat email "lebih bagus"! Ini mencakup traceback penuh, termasuk nilai pengaturan dan variabel lokal. Sesuai dokumen, ini merupakan masalah keamanan: docs.djangoproject.com/en/1.8/topics/logging/…django-db-log, disebutkan dalam jawaban lain, telah diganti dengan:
https://github.com/dcramer/django-sentry
sumber
Jelas James benar, tetapi jika Anda ingin mencatat pengecualian di datastore, ada beberapa solusi open source yang sudah tersedia:
1) CrashLog adalah pilihan yang baik: http://code.google.com/p/django-crashlog/
2) Db-Log juga merupakan pilihan yang baik: http://code.google.com/p/django-db-log/
Apa perbedaan keduanya? Hampir tidak ada yang bisa saya lihat, jadi salah satu akan cukup.
Saya telah menggunakan keduanya dan mereka bekerja dengan baik.
sumber
Beberapa waktu telah berlalu sejak pengiriman kode EMP yang paling membantu. Saya baru saja mengimplementasikannya, dan sementara meronta-ronta dengan beberapa opsi manage.py, untuk mencoba membasmi bug, saya mendapat peringatan penghentian akibat bahwa dengan versi Django saya saat ini (1,5.?) Filter require_debug_false sekarang dibutuhkan untuk penangan mail_admins.
Berikut adalah kode yang direvisi:
sumber
Saya baru saja mengalami masalah yang mengganggu dengan
fcgi
skrip saya . Itu terjadi bahkan sebelum Django dimulai. Kurangnya penebangan sangat menyakitkan. Bagaimanapun, mengarahkan stderr ke file sebagai hal pertama sangat membantu:sumber