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