Saya tidak bisa memahami logging
modul Python . Kebutuhan saya sangat sederhana: Saya hanya ingin memasukkan semuanya ke syslog. Setelah membaca dokumentasi, saya mendapatkan skrip tes sederhana ini:
import logging
import logging.handlers
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler()
my_logger.addHandler(handler)
my_logger.debug('this is debug')
my_logger.critical('this is critical')
Tetapi skrip ini tidak menghasilkan catatan log apa pun di syslog. Apa yang salah?
Jawaban:
Ubah baris menjadi ini:
Ini berhasil untuk saya
sumber
'/var/run/syslog'
adalah Hal yang Benar di OS X.logging.Formatter(fmt='myscriptname[%(process)d]: %(levelname)s: %(message)s', ...)
, kondisi rsyslog seperti$programname == 'myscriptname'
karya.Anda harus selalu menggunakan host lokal untuk pencatatan, apakah ke / dev / log atau localhost melalui tumpukan TCP. Hal ini memungkinkan daemon pencatatan sistem yang sesuai dengan RFC dan berfitur lengkap untuk menangani syslog. Ini menghilangkan kebutuhan akan daemon jarak jauh untuk berfungsi dan menyediakan kapabilitas yang ditingkatkan dari daemon syslog seperti rsyslog dan syslog-ng misalnya. Filosofi yang sama berlaku untuk SMTP. Serahkan saja ke perangkat lunak SMTP lokal. Dalam kasus ini gunakan 'mode program' bukan daemon, tapi idenya sama. Biarkan perangkat lunak yang lebih mampu menanganinya. Mencoba kembali, mengantri, spooling lokal, menggunakan TCP bukan UDP untuk syslog dan sebagainya menjadi mungkin. Anda juga dapat [kembali] mengkonfigurasi daemon tersebut secara terpisah dari kode Anda sebagaimana mestinya.
Simpan pengkodean Anda untuk aplikasi Anda, biarkan perangkat lunak lain melakukan tugasnya secara bersamaan.
sumber
Saya menemukan modul syslog untuk mempermudah mendapatkan perilaku logging dasar yang Anda gambarkan:
Ada hal-hal lain yang dapat Anda lakukan juga, tetapi bahkan hanya dua baris pertama saja yang akan memberi Anda apa yang Anda minta seperti yang saya pahami.
sumber
Menyatukan semuanya dari sini dan tempat lain, inilah yang saya dapatkan yang berfungsi pada unbuntu 12.04 dan centOS6
Buat file
/etc/rsyslog.d/
yang diakhiri dengan .conf dan tambahkan teks berikutMulai ulang
rsyslog
, memuat ulang sepertinya TIDAK berfungsi untuk file log baru. Mungkin hanya memuat ulang file conf yang ada?Kemudian Anda dapat menggunakan program uji ini untuk memastikan program itu benar-benar berfungsi.
sumber
sudo service rsyslog restart
Saya menambahkan sedikit komentar ekstra untuk berjaga-jaga jika itu membantu siapa pun karena saya menemukan pertukaran ini berguna tetapi membutuhkan sedikit info tambahan ini untuk membuat semuanya berfungsi.
Untuk masuk ke fasilitas tertentu menggunakan SysLogHandler, Anda perlu menentukan nilai fasilitas. Katakanlah misalnya yang telah Anda tentukan:
local3.* /var/log/mylog
di syslog, maka Anda ingin menggunakan:
handler = logging.handlers.SysLogHandler(address = ('localhost',514), facility=19)
dan Anda juga perlu memiliki syslog yang mendengarkan di UDP untuk menggunakan localhost daripada / dev / log.
sumber
Apakah syslog.conf Anda diatur untuk menangani fasilitas = pengguna?
Anda dapat mengatur fasilitas yang digunakan oleh python logger dengan argumen fasilitas, seperti ini:
sumber
LOG_DAEMON
Anda berikan sebagai nilai untukfacility
parameter.SysLogHandler.LOG_DAEMON
.skrip di atas akan masuk ke fasilitas LOCAL0 dengan "LOG_IDENTIFIER" kustom kami ... Anda dapat menggunakan LOCAL [0-7] untuk tujuan lokal.
sumber
Dari https://github.com/luismartingil/per.scripts/tree/master/python_syslog
sumber
Berikut adalah cara diktConfig yaml yang direkomendasikan untuk versi 3.2 & yang lebih baru.
Masuk log
cfg.yml
:Muat konfigurasi menggunakan:
Mengkonfigurasi syslog & file langsung. Perhatikan bahwa
/dev/log
spesifik OS.sumber
Saya memperbaikinya di buku catatan saya. Layanan rsyslog tidak mendengarkan layanan soket.
Saya mengonfigurasi baris ini di bawah dalam
/etc/rsyslog.conf
file dan memecahkan masalah:$SystemLogSocketName /dev/log
sumber
Anda juga dapat menambahkan file handler atau rotating file handler untuk mengirimkan log Anda ke file lokal: http://docs.python.org/2/library/logging.handlers.html
sumber