4

logging.basicConfig を使用して、好みのログ形式とターゲットを設定しました。アプリケーションで Tornado WebSocket の使用を開始しましたが、logging.basicConfig を使用して設定したフォーマットとターゲットが無視されています。すべてのログ メッセージが (ターゲット ログ ファイルではなく) stdout に出力され、書式設定が (自分のログ ファイルではなく) Tornado のものになっています。これを修正するにはどうすればよいですか?

4

2 に答える 2

1

stdout ストリーム レベルで竜巻ロガーのデフォルト形式をオーバーライドするために試した解決策があります (3 つすべてで動作するようです: app_log、gen_log、access_log):

import logging
from tornado.log import app_log, gen_log, access_log, LogFormatter

# define your new format, for instance :
my_log_format = '%(color)s::: %(levelname)s %(name)s %(asctime)s ::: %(module)s:%(lineno)d in %(funcName)s :::%(end_color)s\
                 \n %(message)s\n' 

# create an instance of tornado formatter, just overriding the 'fmt' arg
my_log_formatter = LogFormatter(fmt=my_log_format, color=True)

# get the parent logger of all tornado loggers :
root_logger     = logging.getLogger()

# set your format to root_logger
root_streamhandler = root_logger.handlers[0]
root_streamhandler.setFormatter(my_log_formatter)

...そして、竜巻のロギングストリームのいずれかを使用すると、次のようになります:

### let's say we log from your 'main.py' file in an '__init__' function : 

app_log.info('>>> this is app_log')
gen_log.info('>>> this is gen_log ')
access_log.info('>>> this is access_log ')

... デフォルトの stdout の代わりに:

[I 180318 21:14:35 main:211] >>> this is app_log 
[I 180318 21:14:35 main:212] >>> this is gen_log 
[I 180318 21:14:35 main:213] >>> this is access_log 

...次のような独自の形式で標準出力を取得します。

::: INFO tornado.application 180318 21:14:44 ::: main:211 in __init__ :::                   
>>> this is app_log 

::: INFO tornado.general 180318 21:14:44 ::: main:212 in __init__ :::                               
>>> this is gen_log 

::: INFO tornado.access 180318 21:14:44 ::: main:213 in __init__ :::                                
 >>> this is access_log 

このソリューションがbasicConfigの問題に直接答えないことは知っていますが、私が推測するのに役立つ可能性があります...

于 2018-03-18T21:06:40.747 に答える
0

ログをログ ファイルに送信するには、次のように Tornado を実行します。

python app.py --log_file_prefix=mylog.log

更新:以下のコメントで述べたように、これはおそらくログファイルをセットアップするためのより良い方法です:

tornado.options.options['log_file_prefix'].set('mylog.log')
tornado.options.parse_command_line()
于 2013-03-05T16:29:44.847 に答える