注意tornado中的日志操作

通过源码可以发现,tornado中也是大量使用了python中的logging模块来处理日志操作。但tornado在处理日志的时候,特别是tornado.options.parse_command_line()时将根日志的级别设置为info,这点需要特别注意!如果在tornado.options.parse_command_line()之前程序对logging的日志级别进行了设置,则很有可能会被tornado进行改写,这点需要特别注意。
通过下面的代码可以很容易就能看出tornado对跟logger的级别进行了调整:

import os
import ssl
import logging
from tornado.httpserver import HTTPServer
from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoop
import tornado.options
from tornado.options import define, options


LOG = logging.getLogger(__name__)

define("port", default=8000, help="run on the given port", type=int)
class TestHandler(RequestHandler):
    def get(self):
        self.write("Hello, World!\n")

application = Application([
    (r"/", TestHandler),],
    debug = True)

if __name__ == "__main__":
    print "main 1 getEffectiveLevel = ", LOG.getEffectiveLevel()
    print "tornado default log level = "tornado.options.options.logging
    tornado.options.options.logging = "debug"
    tornado.options.parse_command_line()

    print "main getEffectiveLevel = ", LOG.getEffectiveLevel()
    # server = HTTPServer(application,ssl_options={
    #        "certfile": os.path.join(os.path.abspath("."), "cert.pem"),
    #        "keyfile": os.path.join(os.path.abspath("."), "privatekey.pem"),
    #    })
    server = HTTPServer(applicatio)
    server.listen(options.port)
    IOLoop.instance().start()

 对根logger的日志级别进行更改主要是tornado的tornado.options所为,源码如下:

def parse_command_line(self, args=None):
        if args is None:
            args = sys.argv
        remaining = []
        for i in xrange(1, len(args)):
            # All things after the last option are command line arguments
            if not args[i].startswith("-"):
                remaining = args[i:]
                break
            if args[i] == "--":
                remaining = args[i + 1:]
                break
            arg = args[i].lstrip("-")
            name, equals, value = arg.partition("=")
            name = name.replace('-', '_')
            if not name in self:
                print_help()
                raise Error('Unrecognized command line option: %r' % name)
            option = self[name]
            if not equals:
                if option.type == bool:
                    value = "true"
                else:
                    raise Error('Option %r requires a value' % name)
            option.parse(value)
        if self.help:
            print_help()
            sys.exit(0)

        # Set up log level and pretty console logging by default
        if self.logging != 'none':
            logging.getLogger().setLevel(getattr(logging, self.logging.upper()))
            enable_pretty_logging()

        return remaining

 

# Default options
define("help", type=bool, help="show this help information")
define("logging", default="info",
       help=("Set the Python log level. If 'none', tornado won't touch the "
             "logging configuration."),
       metavar="debug|info|warning|error|none")

 可以看到,tornado.options在parse_command_line的时候,会判断self.logging 是否为none,非none时执行logging.getLogger().setLevel(getattr(logging, self.logging.upper())),也就是对根logger的level进行设置,在tornado.options被import的时候定义了一个logging,parse_command_line的时候将logging的根级别设置为info。
总之,在tornado应用中,应该特别注意logging级别设置同tornado.options.parse_command_line的先后顺序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值