Gunicorn: Catat pesan dari app.logger Flask

Dibuat pada 19 Jul 2012  ·  11Komentar  ·  Sumber: benoitc/gunicorn

Pesan dari logger Flask seperti app.logger.info("This is a message") tidak disimpan dalam file log gunicorn.

Komentar yang paling membantu

Flask tidak mencatat pesan dalam mode produksi secara default karena tidak membuat asumsi tentang lingkungan Anda (http://flask.pocoo.org/docs/errorhandling/). Untuk membuat app.logger Flask mencatat pesan melalui gunicorn, Anda harus menambahkan pengendali logging. Misalnya, inilah logger ke stderr gunicorn:

import logging
import flask

app = flask.Flask(__name__)

@app.before_first_request
def setup_logging():
    if not app.debug:
        # In production mode, add log handler to sys.stderr.
        app.logger.addHandler(logging.StreamHandler())
        app.logger.setLevel(logging.INFO)

Ini bukan masalah dengan gunicorn dan bisa ditutup.

Semua 11 komentar

Flask tidak mencatat pesan dalam mode produksi secara default karena tidak membuat asumsi tentang lingkungan Anda (http://flask.pocoo.org/docs/errorhandling/). Untuk membuat app.logger Flask mencatat pesan melalui gunicorn, Anda harus menambahkan pengendali logging. Misalnya, inilah logger ke stderr gunicorn:

import logging
import flask

app = flask.Flask(__name__)

@app.before_first_request
def setup_logging():
    if not app.debug:
        # In production mode, add log handler to sys.stderr.
        app.logger.addHandler(logging.StreamHandler())
        app.logger.setLevel(logging.INFO)

Ini bukan masalah dengan gunicorn dan bisa ditutup.

ditutup per permintaan. Terima kasih!

Apakah gunicorn secara otomatis mengambil log dari STDERR?

@benoitc
Bagaimana cara memaksa gunicorn untuk mengambil log dari STDERR?

Bendera -R mungkin yang Anda cari.

http://gunicorn-docs.readthedocs.org/en/latest/settings.html#enable -stdio-inheritance

-R tidak melakukannya untuk saya.

Di bawah ini adalah pengaturan saya

@app.route('/')
def index():
    console = logging.StreamHandler()
    log = logging.getLogger("asdasd")
    log.addHandler(console)
    log.setLevel(logging.DEBUG)
    log.error("Something")
    print >> sys.stderr, "Another thing"
    return 'ok'

Inilah cara saya menjalankannya

gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level -D debug server:app

Saya mendapatkan log gunicorn di /mnt/log/test.log tetapi tidak ada log aplikasi saya.

Oke. Saya mungkin salah paham cara kerjanya, kecuali itu masalah sederhana
harus menyiram stderr secara manual (IIRC ini karena menjadi buffered
ketika gunicorn bercabang, mungkin?)

Tapi itu pasti jauh lebih mudah untuk mengontrol ke mana pesan log Anda pergi jika
anda menggunakan logger python alih-alih stdio.
Pada 26 Jun 2014 13:39, "Yousuf Fauzan" [email protected] menulis:

-R tidak melakukannya untuk saya.

Di bawah ini adalah pengaturan saya

@app.route('/')
indeks def():
konsol = logging.StreamHandler()
log = logging.getLogger("asdasd")
log.addHandler(konsol)
log.setLevel(logging.DEBUG)
log.error("Sesuatu")
print >> sys.stderr, "Hal lain"
kembali 'oke'

Inilah cara saya menjalankannya

gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level debug server:app

Saya mendapatkan log gunicorn di /mnt/log/test.log tetapi tidak ada aplikasi saya
log.


Balas email ini secara langsung atau lihat di GitHub
https://github.com/benoitc/gunicorn/issues/379#issuecomment -47276949.

Saya pikir saya menemukan masalahnya. Ini adalah entri di changelog untuk 19.00

fix logging: don’t try to redirect stdout/stderr to the logfile.

Saya baru saja mencoba dengan v18 dan log dari StreamHandler dialihkan ke log gunicorn. Adakah ide bagaimana cara memperbaikinya?
@benoitc @tilgovi

@spicavigo gunicorn tidak akan mengarahkan stderr ke file log secara otomatis. Cara mengatasinya adalah menghapus peretasan seperti yang dibahas di #591 . Apakah Anda mencoba --error-logfile=- yang menampilkan log di konsol?

Jika Anda ingin langsung mengembalikan kesalahan ke file kesalahan, Anda akhirnya dapat mencetak ke environ['wsgi.errors'] atau mencatatnya: ee08ac86441e36c3433849b79b3839d1425647fd .

Terima kasih @benoitc

Saya sekarang masuk ke file alih-alih stderr. Hanya saja perubahan terjadi di antara dev saya dan itu benar-benar membuat saya tersandung. Saya pip install gunicorn dan tiba-tiba stderr redirect berhenti bekerja dan saya tidak menyadarinya karena perubahan versi dan bukan karena bug dalam kode saya :)

@benoitc Apakah masih mungkin untuk mencatat stderr ke file log entah bagaimana?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat