如何防止Python Tornado登录到stdout / console?

问题描述

我需要禁止龙卷风登录到STDOUT。我正在使用Python 3.8,并且在Ubuntu 18.04上运行。我希望我的日志语句仅由旋转文件记录器处理。问题在于,已记录的语句已记录到文件中并也可以控制台:

import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger("ex_logger")

nh = logging.NullHandler()

rfh = RotatingFileHandler(filename="./logs/process.log",mode='a',maxBytes=50000000,backupCount=25,encoding=None,delay=False)
rfh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
rfh.setFormatter(formatter)

logger.handlers = []
logger.propagete = False
logger.addHandler(rfh)

logging.getLogger("tornado.access").handlers = []
logging.getLogger("tornado.application").handlers = []
logging.getLogger("tornado.general").handlers = []

logging.getLogger("tornado.access").addHandler(nh)
logging.getLogger("tornado.application").addHandler(nh)
logging.getLogger("tornado.general").addHandler(nh)

logging.getLogger("tornado.access").propagate = False
logging.getLogger("tornado.application").propagate = False
logging.getLogger("tornado.general").propagate = False

....

def main():

    ######
    # this message eppears in both the output log file and stdout
    ######
    logger.info(" application init ... ")
    
    asyncio.set_event_loop_policy(tornado.platform.asyncio.AnyThreadEventLoopPolicy())
    tornado.options.parse_command_line()
    app = Application()
    app.listen(options.port)
    tornado.ioloop.IOLoop.current().start()


if __name__ == "__main__":
    main()

解决方法

您还需要为根处理程序(logging.getLogger(""))定义日志记录策略。龙卷风会查看根处理程序,以确定是否已配置日志记录或是否需要默认设置。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...