Saya tidak dapat menemukan cara untuk mengatur pencatat "default" untuk instalasi Django saya. Saya ingin menggunakan LOGGING
pengaturan baru Django 1.3 di settings.py
.
Saya telah melihat contoh Dokumen Pencatatan Django , tetapi bagi saya sepertinya mereka hanya penangan pengaturan yang akan melakukan pencatatan untuk penebang tertentu. Dalam kasus contoh mereka, mereka menyiapkan penangan untuk penebang bernama 'django', 'django.request', dan 'myproject.custom'.
Yang ingin saya lakukan adalah mengatur default logging.handlers.RotatingFileHandler
yang akan menangani semua logger secara default. yaitu, jika saya membuat modul baru di suatu tempat dalam proyek saya dan itu dilambangkan dengan sesuatu seperti:, my_app_name.my_new_module
saya harus dapat melakukan ini dan memiliki semua pencatatan ke log file berputar.
# In file './my_app_name/my_new_module.py'
import logging
logger = logging.getLogger('my_app_name.my_new_module')
logger.debug('Hello logs!') # <-- This should get logged to my RotatingFileHandler that I setup in `settings.py`!
logs/
folder terlebih dahulu :-). Jika tidak, Anda akan mendapatkan kesalahan saat menjalankan./manange.py runserver
. @ Chris W. Terima kasih untuk contoh pengaturan logging Anda. Itu sangat membantu saya!logger = logging.getLogger('foo'); logger.warn('bar');
makadefault
pawang akan menangkap logging itu dan sesuatu seperti itu<time> WARN: foo: bar
akan berakhir dilogs/mylog.log
Seperti yang Anda katakan dalam jawaban Anda , Chris, satu opsi untuk mendefinisikan logger default adalah menggunakan string kosong sebagai kuncinya.
Namun, menurut saya cara yang dimaksudkan adalah dengan mendefinisikan logger khusus di bawah
root
kunci kamus konfigurasi logging. Saya menemukan ini di dokumentasi Python :Berikut konfigurasi dari jawaban Anda yang diubah untuk menggunakan
root
kunci:Agar adil, saya tidak dapat melihat perbedaan perilaku antara kedua konfigurasi tersebut. Tampaknya mendefinisikan logger dengan kunci string kosong akan mengubah logger root, karena
logging.getLogger('')
akan mengembalikan logger root.Satu-satunya alasan saya lebih memilih
'root'
lebih''
adalah bahwa itu adalah eksplisit tentang memodifikasi akar logger. Jika Anda penasaran,'root'
ganti''
jika Anda mendefinisikan keduanya, hanya karena entri root diproses terakhir.sumber
root
entri ke root dict dalam proses transisi yang mulus dari logika fileConfig 2.6 ke logika 2.7 dictConfig.setelah menambahkan:
kami dapat mengubah format menjadi:
atau
sumber
Saya membuat contoh cepat untuk memeriksa konfigurasi apa yang digunakan ketika
root
kunci dan''
logger kosong direferensikan di config dict.Mencetak hasil sebagai berikut:
menunjukkan bahwa konfigurasi di bawah
root
kunci memiliki prioritas tertinggi. Jika blok dihilangkan, hasilnya adalah:Dalam kedua kasus tersebut, saya dapat men-debug dan menentukan bahwa ketiga logger (
l1
,l2
danroot
) mereferensikan instance logger yang sama, root logger.Harapan itu akan membantu orang lain yang, seperti saya, bingung dengan 2 cara berbeda untuk mengkonfigurasi logger root.
sumber