Apakah ada cara untuk membuat pendataan Python menggunakan logging
modul secara otomatis menampilkan sesuatu ke stdout di samping file log di mana mereka seharusnya pergi? Sebagai contoh, saya ingin semua panggilan ke logger.warning
, logger.critical
, logger.error
untuk pergi ke tempat-tempat mereka dimaksudkan tetapi di samping selalu disalin ke stdout
. Ini untuk menghindari duplikasi pesan seperti:
mylogger.critical("something failed")
print "something failed"
Jawaban:
Semua hasil logging ditangani oleh penangan; cukup tambahkan
logging.StreamHandler()
ke root logger.Berikut ini contoh mengkonfigurasi stream handler (menggunakan
stdout
alih-alih defaultstderr
) dan menambahkannya ke root logger:sumber
stdout
sebagai tambahan?logging.Formatter
.Cara termudah untuk masuk ke stdout:
sumber
stream=sys.stdout
masih berfungsi untuk masuk ke konsol untuk saya.Mungkin menggunakan beberapa penangan.
Silakan lihat: https://docs.python.org/2/howto/logging-cookbook.html
sumber
sys.stdout
parameter inch = logging.StreamHandler()
Anda bisa membuat dua penangan untuk file dan stdout dan kemudian membuat satu logger dengan
handlers
argumen untukbasicConfig
. Ini bisa berguna jika Anda memiliki log_level dan format output yang sama untuk kedua penangan:sumber
Cara termudah untuk masuk ke file dan ke stderr:
sumber
Berikut ini adalah solusi yang didasarkan pada kuat tetapi kurang didokumentasikan
logging.config.dictConfig
metode . Alih-alih mengirim setiap pesan logstdout
, ia mengirim pesan dengan level logERROR
dan lebih tinggi kestderr
dan semua yang lainnyastdout
. Ini dapat bermanfaat jika bagian lain dari sistem mendengarkanstderr
ataustdout
.sumber
Karena tidak ada yang membagikan liner dua yang rapi, saya akan membagikan sendiri:
sumber
Berikut ini contoh yang sangat sederhana:
Output akan menampilkan "test msg" pada stdout dan juga dalam file.
sumber