我正在运行python(v 3.6)龙卷风应用程序(我相信最新版本是6.x)。我试图删除我的print()语句,而是改用日志记录模块。首先,我创建了此get_logger()函数:
def get_logger(lname, debug_level=logging.DEBUG):
lname_logger = logging.getLogger(lname)
lname_logger.setLevel(debug_level)
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(debug_level)
FORMAT = '%(asctime)s,[%(filename)s:%(lineno)d] %(message)s'
formatter = logging.Formatter(FORMAT)
ch.setFormatter(formatter)
lname_logger.addHandler(ch)
return lname_logger
在龙卷风应用处理程序中,我有以下代码(我删除了不相关的位并将其剥离到最低限度):
class App(object):
def __init__(self):
self.logger = utils.get_logger("myApp")
tornado.options.parse_command_line()
self.application = tornado.web.Application([
(r"/", MainHandler),
(r"/login", LoginHandler),
...
])
self.application.listen(options.port)
self.logger.info("Listening on port %d" % options.port)
tornado.ioloop.IOLoop.current().start()
当我运行这段代码时,我看到记录发生了两次,就像这样:
2019-04-14 12:50:01,636,[server.py:231] Listening on port 8000
[I 190414 12:50:01 server:231] Listening on port 8000
现在有趣的一点是,如果我在独立的python文件中的龙卷风应用程序外部运行日志记录代码,则仅打印第一行。在龙卷风应用程序中,每个调用以两种不同的格式打印两次(第二行根据日志记录级别进行着色,以提供更多信息)。我相信第二行是由Tornado通过触发的一些内置日志记录打印的。那么如何设置日志记录以不打印重复项,而仅使用第二种?
答案 0 :(得分:0)
好吧,在重新阅读有关Tornado内置日志记录机制的文档时,我找到了答案:
This formatter is enabled automatically by tornado.options.parse_command_line or tornado.options.parse_config_file (unless --logging=none is used).
这正是我在做什么。当我切换为仅使用Tornado记录器时,重复项消失了。