Untuk menemukan lokasi file log, coba buat instance log Anda objek dalam shell Python di lingkungan Anda dan melihat nilai:
log.handlers[0].stream
logging modul menggunakan penangan yang melekat pada penebang untuk memutuskan bagaimana, di mana, atau bahkan jika pesan pada akhirnya disimpan atau ditampilkan. Anda dapat mengonfigurasi logging secara default untuk menulis ke file juga. Anda harus benar-benar membaca dokumennya, tetapi jika Anda memanggil logging.basicConfig(filename=log_file_name) di mana log_file_name adalah nama file yang Anda inginkan untuk menulis pesan (perhatikan bahwa Anda harus melakukan ini sebelum hal lain di logging dipanggil sama sekali), maka semua pesan dicatat ke semua penebang (kecuali beberapa konfigurasi ulang lebih lanjut terjadi nanti) akan ditulis di sana. Waspadai level apa yang diatur oleh logger; jika memori berfungsi, info berada di bawah level log default, jadi Anda harus menyertakan level=logging.INFO dalam argumen untuk basicConfig juga agar pesan Anda berakhir di file.
Mengenai bagian lain dari pertanyaan Anda, logging.getLogger(some_string) mengembalikan Logger objek, dimasukkan ke dalam posisi yang benar dalam hierarki dari root logger, dengan nama menjadi nilai some_string . Dipanggil tanpa argumen, ia mengembalikan root logger. __name__ mengembalikan nama modul saat ini, jadi logging.getLogger(__name__) mengembalikan Logger objek dengan nama yang disetel ke nama modul saat ini. Ini adalah pola umum yang digunakan dengan logging , karena ini menyebabkan struktur logger mencerminkan struktur modul kode Anda, yang sering membuat pesan logging jauh lebih berguna saat melakukan debug.
Beberapa jawaban bagus untuk ini, tetapi jawaban teratas tidak berhasil untuk saya karena saya menggunakan jenis penangan file yang berbeda, dan handler.stream tidak menyediakan jalur, tetapi pegangan file, dan mengeluarkan jalur dari itu adalah agak tidak jelas. Inilah solusi saya:
import logging
from logging import FileHandler
# note, this will create a new logger if the name doesn't exist,
# which will have no handlers attached (yet)
logger = logging.getLogger('<name>')
for h in logger.handlers:
# check the handler is a file handler
# (rotating handler etc. inherit from this, so it will still work)
# stream handlers write to stderr, so their filename is not useful to us
if isinstance(h, FileHandler):
# h.stream should be an open file handle, it's name is the path
print(h.stream.name)
Untuk mendapatkan lokasi log pencatat file sederhana, cobalah
logging.getLoggerClass().root.handlers[0].baseFilename