Gunicorn: Bagaimana cara mencetak accesslog ke STDOUT?

Dibuat pada 19 Jan 2016  ·  22Komentar  ·  Sumber: benoitc/gunicorn

Hai,

http://docs.gunicorn.org/en/stable/settings.html#accesslog memberi tahu saya bahwa '-' akan ditampilkan ke stderr tetapi kami lebih memilih STDOUT untuk tujuan logging. Apakah ada cara untuk melakukan itu?

Terima kasih!

Documentation FeaturLogging

Komentar yang paling membantu

Dengan file aplikasi myapp.py , saya mencoba yang berikut ini.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Saya dapat mengonfirmasi bahwa output log akses masuk ke stdout .

Semua 22 komentar

Baris yang relevan ada di sini: https://github.com/benoitc/gunicorn/blame/master/gunicorn/glogging.py#L335 logging.StreamHandler() default ke sys.stderr . Mungkin kita bisa mengubah accesslog untuk menerima "stdout" dan "stderr" sebagai nilai yang valid dan meneruskan ke logging.StreamHandler() .

Solusi lain tetapi kurang fleksibel:

Handler konsol sudah mencetak ke sys.stdout : https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L64 Kita bisa mengatur handler ke "console" untuk gunicorn.accesslog seperti yang telah kami lakukan untuk gunicorn.error di https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L55

Saya bingung. Bukankah StreamHandler sudah masuk ke sys.stdout?

Oke saya mengerti sekarang. Awalnya kami mencetak log ke stdout. IMO log akses harus default ke STDOUT. Pikiran?

@benoitc :+1:

Akses masuk di stdout
Kesalahan masuk stderr

ada pembaruan tentang permintaan ini?

@benoitc Saya tidak yakin komit ini mengatasi masalah ini. Katakanlah saya menjalankan, gunicorn myapp:app tanpa argumen tambahan. Apakah harapan bahwa gunicorn harus mencatat catatan akses ke keluaran standar? Jika demikian, gunicorn tidak melakukan itu.

Di https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L302 tanpa argumen baris perintah self.cfg.accesslog adalah None dan fungsi kembali lebih awal. Sejauh yang saya tahu, sepertinya tidak ada cara untuk masuk ke stdout tanpa menentukan --log-config atau --log-syslog . Apakah ini benar?

secara default log akses dinonaktifkan jika ini yang Anda maksud?

@benoitc Ya. Diskusi di atas tampaknya menunjukkan bahwa log akses akan masuk ke stdout dan log kesalahan ke stderr. Namun, sepertinya logging akses dinonaktifkan secara default.

BTW, dengan Python 2.7 saya dulu bisa melakukan --access-log /dev/stdout --error-log /dev/stderr dan itu akan berhasil. Dengan Python 3, melewatkan /dev/stdout sebagai argumen gagal di https://github.com/benoitc/gunicorn/blob/f722a6eb65e51407c420ac3d6be72d03bd773ad0/gunicorn/util.py#L498

👍 @suriya Saya pikir saya sedang mencari perilaku yang sama dengan Anda -- Saya ingin menjalankan --capture-log dan mengaktifkan --access-logfile=<something> , tetapi saya lebih suka jalur log akses saya pergi ke stdout tidak stderr.

EDIT: Untuk memperjelas, ini tampaknya hanya masalah dengan Python3. Menggunakan python3.5.1, meneruskan --access-logfile=/dev/stdout ke gunicorn gagal memulai server.

Ya, sepertinya pencatatan akses dinonaktifkan secara default.

@huoxy Lebih dari apa yang default, saya pikir masalahnya lebih bahwa tidak ada cara sederhana untuk menulis log akses ke output standar.

@huoxy --access -logfile=-` harus melakukan trik. biarkan aku k'ow jika tidak.

  • benoît
    Pada Rabu, 27 Juli 2016 pukul 08:49, Suriya Subramanian [email protected]
    menulis:

@huoxy https://github.com/huoxy Lebih dari apa yang default, saya pikir
masalahnya lebih karena tidak ada cara sederhana untuk menulis log akses ke
keluaran standar.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

juga mungkin masalah doc. tetapi log akses harus dicetak ke stdout
ketika - digunakan. jika tidak, itu adalah bug. Biarkan aku tahu...
Pada Rabu, 27 Juli 2016 pukul 09:03, Benoit Chesneau [email protected] menulis:

@huoxy --access -logfile=-` harus melakukan trik. biarkan aku k'ow jika tidak.

  • benoît
    Pada Rabu, 27 Juli 2016 pukul 08:49, Suriya Subramanian [email protected]
    menulis:

@huoxy https://github.com/huoxy Lebih dari apa yang default, saya pikir
masalahnya lebih karena tidak ada cara sederhana untuk menulis log akses ke
keluaran standar.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

@benoitc Seperti disebutkan di #1293, gunicorn --access-log - mencatat akses ke kesalahan standar. Saya mencoba dengan gunicorn --access-log=- dan log masih masuk ke kesalahan standar.

Menurut Ini:
https://github.com/gunicorn/gunicorn/blob/master/gunicorn/glogging.py#L58

default logger adalah console yang outputnya ke stdout, jadi saya rasa jika Anda membutuhkan segalanya untuk stdout seperti saya, untuk semuanya untuk mendapatkan driver logging gunicorn, Anda bisa membiarkan opsi itu kosong.

Juga, solusi yang saya sarankan, adalah membuat tautan simbolis untuk file log ke /dev/stdout atau /dev/stderror jika tidak berfungsi secara langsung:

ln -sf /var/log/gunicorn.access.log  /dev/stdout
ln -sf /var/log/gunicorn.error.log  /dev/stdout

exec newrelic-admin run-program gunicorn --chdir /usr/src/app --name nexchange --bind 0.0.0.0:${GUNICORN_PORT} --workers 3 --log-level=info --log-file=/var/log/gunicorn.error.log --access-logfile=/var/log/gunicorn.access.log nexchange.wsgi:application "$@"

Saya baru saja pindah ke gunicorn 19.7.0 yang dirilis minggu lalu. Sayangnya, saya masih tidak bisa mendapatkan log akses yang ditulis selain stderr.

Saya sudah mencoba menjalankan gunicorn tanpa opsi dan juga dengan semua permutasi termasuk/tidak termasuk "--access-logfile=- --error-logfile=- --log-level=DEBUG".

Apakah saya melewatkan sesuatu yang mendasar tentang logging gunicorn? Apakah sesuatu dari lingkungan saya atau dari Django mungkin berdarah dan menyebabkan masalah ini?

Dengan file aplikasi myapp.py , saya mencoba yang berikut ini.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Saya dapat mengonfirmasi bahwa output log akses masuk ke stdout .

Saya menggunakan Python 2.7.14. (Entah bagaimana melewatkan balasan cepat beberapa bulan yang lalu.)

Anda juga dapat menggunakan accesslog = "-" di gunicorn.config.py

Apakah halaman ini membantu?
0 / 5 - 0 peringkat