2

Tornado ウェブサーバーを使用してウェブソケットを実装しようとしています。

私のセットアップは次のようになります。

from tornado.options import options, define, parse_command_line
import django.core.handlers.wsgi
import logging
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.wsgi

from pogows.tornado_sockets import GetSocketHandler, UpdateSocketHandler
from mobile.cleaner import start_cleaning

define('port', type=int, default=8080)
tornado.options.options['log_file_prefix'].set('/var/www/pogo_django/logs/tornado_server.log')
tornado.options.parse_command_line()

<snip>

def main():

    logger = logging.getLogger(__name__)
    wsgi_app = tornado.wsgi.WSGIContainer(
        django.core.handlers.wsgi.WSGIHandler())
    tornado_app = tornado.web.Application(
        [
            ('/hello-tornado', HelloHandler),
            ('/socket/get', GetSocketHandler),
            ('/socket/update', UpdateSocketHandler),
            ('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
        ], debug=True)
    logger.info("Tornado POGO server starting...")
    server = tornado.httpserver.HTTPServer(tornado_app)
    server.listen(options.port)
    start_cleaning()
    tornado.ioloop.IOLoop.instance().start()

これまでのところ、竜巻のログ、情報メッセージが表示されます。今、websocket ハンドラー クラスからいくつかのものをログに記録しようとしています。

class GetSocketHandler(tornado.websocket.WebSocketHandler):

    def open(self):
        print "opening"

    def on_closed(self):
        print "closing"

    def on_message(self, message):
        last_update=datetime.datetime.utcnow().replace(tzinfo=utc)
        try:
            print "getting_user"
    ...

Tornado は、次の構成のSupervisord によって管理されます。

[program:pogo_tornado] command=/var/www/pogo_django/tornado_server.py user=www-data stdout_logfile=/var/www/pogo_django/logs/pogo_stdout.log stderr_logfile=/var/www/pogo_django/logs/pogo_stderr.log environment=PYTHONPATH="/var/www/pogo_django/",DJANGO_SETTINGS_MODULE="pogo.settings"

私はいくつかのことを試しました。

  1. print上記のスニペットからわかるように、supervisord がそれをキャッチして stdout/stderr ログに送信することを期待して、ステートメントを使用するだけです。
  2. logging.getLogger()websocket クラス内に別のインスタンスを作成し、それを使用します。

どれも望ましい結果を生み出しません。

コマンドラインから tornado を手動で実行すると、printバージョンがコンソールに表示されますが、loggingとにかく動作しません。

どこが間違っていますか?

4

1 に答える 1

3

ああ、わかった。getLogger()ロギングレベルを設定せずに、やみくもににロギングして使用していましたDEBUG

明示的に使用logger.setLevel(logging.DEBUG)すると、ログにメッセージが表示されました。

どうやらトルネードはデフォルトで他のレベルを設定しているようです。愚かな私。

于 2012-10-13T21:31:35.103 に答える