Bagaimana saya bisa mengirim pesan jejak ke konsol (seperti print
) ketika saya menjalankan aplikasi Django saya di bawah manage.py runserver
, tetapi pesan tersebut dikirim ke file log ketika saya menjalankan aplikasi di bawah Apache?
Saya meninjau pencatatan Django dan meskipun saya terkesan dengan fleksibilitas dan konfigurasinya untuk penggunaan tingkat lanjut, saya masih bingung dengan cara menangani kasus penggunaan sederhana saya.
Jawaban:
Teks yang dicetak ke stderr akan muncul di log kesalahan httpd saat dijalankan dengan mod_wsgi. Anda dapat menggunakan
print
secara langsung, ataulogging
sebagai gantinya.sumber
print("Goodbye cruel world!", file=sys.stderr)
Berikut adalah solusi berbasis logging Django. Ini menggunakan pengaturan DEBUG daripada benar-benar memeriksa apakah Anda menjalankan server pengembangan atau tidak, tetapi jika Anda menemukan cara yang lebih baik untuk memeriksanya, itu harus mudah beradaptasi.
lihat https://docs.djangoproject.com/en/dev/topics/logging/ untuk detailnya.
sumber
LOGGING['loggers'][logger]['handlers'] += ['console']
settings.py
ke bawah, dan mengaturDEBUG = True
(cari pengaturan itu di dekat bagian atas dalam file yang sama). Kemudian, saya menjalankanpython manage.py runserver
dari terminal (lihat dokumen django untuk detailnya), dan pesan log akan muncul di jendela terminal. Dalam produksi, saya akan menggunakan settings.py yang berbeda, di manaDEBUG = False
- pesan log masuk/path/to/your/file.log
.Anda dapat mengkonfigurasi logging di
settings.py
file Anda .Satu contoh:
Namun itu tergantung pada pengaturan DEBUG, dan mungkin Anda tidak ingin khawatir tentang bagaimana pengaturannya. Lihat jawaban ini di Bagaimana saya dapat mengetahui apakah aplikasi Django saya berjalan pada server pengembangan atau tidak? untuk cara yang lebih baik dalam menulis bersyarat itu. Edit: contoh di atas adalah dari proyek Django 1.1, konfigurasi pencatatan di Django agak berubah sejak versi itu.
sumber
Saya menggunakan ini:
logging.conf:
testapp.py:
sumber
Anda dapat melakukan ini dengan cukup mudah dengan
tagalog
(https://github.com/dorkitude/tagalog)Misalnya, saat modul python standar menulis ke objek file dibuka dalam mode tambahkan, modul App Engine (https://github.com/dorkitude/tagalog/blob/master/tagalog_appengine.py) menggantikan perilaku ini dan sebagai gantinya menggunakan
logging.INFO
.Untuk mendapatkan perilaku ini dalam proyek App Engine, cukup lakukan:
Anda dapat memperluas modul sendiri dan menimpa fungsi log tanpa banyak kesulitan.
sumber
Ini bekerja cukup baik di local.py saya, menyelamatkan saya mengacaukan logging biasa:
sumber