-->

Where can I check tornado's log file?

2019-02-02 12:35发布

问题:

I think there was a default log file, but I didn't find it yet.

Sometimes the HTTP request process would throw an exception on the screen, but I suggest it also goes somewhere on the disk or I wouldn't know what was wrong during a long run test.

P.S.: write an exception handler is another topic; first I'd like to know my question's answer.

I found something here: https://groups.google.com/forum/?fromgroups=#!topic/python-tornado/px4R8Tkfa9c

But it also didn't mention where can I find those log.

回答1:

It uses standard python logging module by default.

Here is definition:

access_log = logging.getLogger("tornado.access")
app_log = logging.getLogger("tornado.application")
gen_log = logging.getLogger("tornado.general")

It doesn't write to files by default. You can run it using supervisord and define in supervisord config, where log files will be located. It will capture output of tornado and write it to files.

Also you can think this way:

tornado.options.options['log_file_prefix'].set('/opt/logs/my_app.log')
tornado.options.parse_command_line()

But in this case - measure performance. I don't suggest you to write to files directly from tornado application, if it can be delegated.

FYI: parse_command_line just enables pretty console logging.



回答2:

With newer versions, you may do

args = sys.argv
args.append("--log_file_prefix=/opt/logs/my_app.log")
tornado.options.parse_command_line(args)

or as @ColeMaclean mentioned, providing

--log_file_prefix=PATH 

at command line



回答3:

There's no logfile by default.

You can use the --log_file_prefix=PATH command line option to set one.

Tornado just uses the Python stdlib's logging module, if you're trying to do anything more complicated.



回答4:

Use RotatingFileHandler:

import logging
from logging.handlers import RotatingFileHandler

log_path = "/path/to/tornado.access.log"
logger_ = logging.getLogger("tornado.access")
logger_.setLevel(logging.INFO)
logger_.propagate = False
handler = RotatingFileHandler(log_path, maxBytes=1024*1024*1024, backupCount=3)
handler.setFormatter(logging.Formatter("[%(name)s][%(asctime)s][%(levelname)s][%(pathname)s:%(lineno)d] > %(message)s"))
logger_.addHandler(handler)