GNU/Linux >> Belajar Linux >  >> Linux

Pencatatan Python - periksa lokasi file log?

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

Linux
  1. Cara Mengaktifkan Pencatatan Kueri MySQL/MariaDB

  2. Periksa file konfigurasi Linux untuk kesalahan sintaks

  3. Cara menggunakan Logrotate untuk mengelola file log

  1. 20 File Log Linux yang Terletak di Direktori /var/log

  2. Cara Memutar File Log Apache di Linux

  3. Hapus semua /var/log?

  1. Cara Mengelola File Log Menggunakan Logrotate Di Linux

  2. Perintah Untuk Membersihkan File Log Lama?

  3. Mencatat Hanya File yang Ditransfer Dengan Rsync?