Bagaimana di sini!
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'default': {
'level': 'INFO',
'formatter': 'standard',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout', # Default is stderr
},
},
'loggers': {
'': { # root logger
'handlers': ['default'],
'level': 'WARNING',
'propagate': False
},
'my.packg': {
'handlers': ['default'],
'level': 'INFO',
'propagate': False
},
'__main__': { # if __name__ == '__main__'
'handlers': ['default'],
'level': 'DEBUG',
'propagate': False
},
}
}
Pemakaian:
# Run once at startup:
logging.config.dictConfig(LOGGING_CONFIG)
# Include in each module:
log = logging.getLogger(__name__)
log.debug("Logging is configured.")
Jika Anda melihat terlalu banyak log dari paket pihak ketiga, pastikan untuk menjalankan konfigurasi ini logging.config.dictConfig(LOGGING_CONFIG)
sebelum paket pihak ketiga diimpor.
Referensi: https://docs.python.org/3/library/logging.config.html#configuration-dictionary-schema
root
logger: di tingkat atas kamus. Ini dijelaskan dalam dokumen , memiliki preferensi daripada['loggers']['']
ketika keduanya hadir, tetapi menurut pendapat saya,['loggers']['']
lebih logis. Lihat juga diskusi di sini'disable_existing_loggers': False
maka Anda mungkin tidak mengkonfigurasi seluruh kain, tapi mungkin menggunakan kembali sesuatu yang sudah ada di sana .. Jika Anda mengaturnyaTrue
maka saya sepertinya tidak mendapatkan hasil.format
dariformatters
?Jawaban yang diterima bagus! Tetapi bagaimana jika seseorang dapat memulai dengan sesuatu yang kurang kompleks? Modul logging adalah hal yang sangat kuat dan dokumentasinya agak berlebihan terutama bagi pemula. Tetapi untuk awalnya Anda tidak perlu mengkonfigurasi formatters dan handler. Anda dapat menambahkannya ketika Anda mengetahui apa yang Anda inginkan.
Sebagai contoh:
sumber
logging.info('Hello, log')
yang membuat segalanya menjadi penting bagi saya. Kebingungan dalam dokumentasi adalah bahwa dengan dictConfig kita tidak perlu lagi melakukangetLogger
atau tindakan-tindakan tersebut.'': { 'level': 'INFO'...
dan mengapa itu tidak berfungsi tanpa itu (mis. ketika mengubah nilai kosong ke nilai yang valid sepertistandard
getLogger()
jika Anda ingin beberapa penebang dengan nama yang berbeda. Setiap logger ini mewarisi konfigurasi dari logger root.getLogger
selalu opsional. Saat menggunakanlogging.info()
metode ini secara langsung logger root digunakan, sementara dengangetLogger()
Anda dapat memiliki logger yang berbeda, dengan nama dan tingkat differents.Contoh dengan Stream Handler, File Handler, Rotating File Handler dan SMTP Handler
sumber
Saya menemukan konfigurasi default Django v1.11.15 di bawah ini, semoga membantu
sumber
sumber