1

Web サーバー tornado を実行しています。次のコマンドを使用して、すべてのログ出力をファイルにリダイレクトしようとしています。しかし、ファイルに出力が表示されません。

/usr/bin/python -u index.py 2>&1 >> /tmp/tornado.log

-u オプションを Python インタープリターに渡します。ログ ファイルに出力が記録されていません。

ただし、次の操作を行うと、標準出力に出力が表示されます

/usr/bin/python index.py
4

1 に答える 1

0

Tornado は組み込みのログ モジュールを使用します。ファイル ハンドラーをルート ロガーに簡単にアタッチし、そのレベルを に設定してNOTSETすべてを記録するか、フィルター処理する場合は他のレベルに設定できます。

参照ドキュメント: logginglogging.handlers

Tornado のロギングで動作する例:

import logging
# the root logger is created upon the first import of the logging module

# create a file handler to add to the root logger
filehandler = logging.FileHandler(
    filename = 'test.log', 
    mode = 'a', 
    encoding = None, 
    delay = False
)

# set the file handler's level to your desired logging level, e.g. INFO
filehandler.setLevel(logging.INFO)

# create a formatter for the file handler
formatter = logging.Formatter('%(asctime)s.%(msecs)d  [%(name)s](%(process)d): %(levelname)s: %(message)s')

# add filters if you want your handler to only handle events from specific loggers 
# e.g. "main.sub.classb" or something like that. I'll leave this commented out.
# filehandler.addFilter(logging.Filter(name='root.child'))

# set the root logger's level to be at most as high as your handler's
if logging.root.level > filehandler.level:
    logging.root.setLevel = filehandler.level

# finally, add the handler to the root. after you do this, the root logger will write
# records to file.
logging.root.addHandler(filehandler)

多くの場合、実際にはトルネードのロガーを抑制したいと考えています (私には独自のロガーがあり、とにかく例外をキャッチし、最終的にログを汚染するだけだからです)。これは、ファイルハンドラーにフィルターを追加することが非常に便利な場所です。 .

于 2013-02-12T19:44:31.357 に答える