tornado 部署 django 和日志重复输出
tornado deploy django and the log repeat output
在我的项目中,我用tornado服务器部署了我的django项目,我的tornado主要功能是:
def main():
tornado.options.options.logging = None
tornado.options.parse_command_line()
os.environ['DJANGO_SETTINGS_MODULE'] = 'Zero.settings'
application = get_wsgi_application()
container = tornado.wsgi.WSGIContainer(application)
http_server = tornado.httpserver.HTTPServer(container, xheaders=True)
http_server.listen(tornado.options.options.port)
tornado.ioloop.IOLoop.current().start()
当我使用 tornado.options.options.logging = None
禁用龙卷风日志输出,但它仍然在我的控制台中输出日志消息两次时,我的 django 日志配置是:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(threadName)s] [%(name)s:%(funcName)s] [%(levelname)s]- %(message)s'}
},
'filters': {
},
'handlers': {
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'log', 'error.log'),
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'console':{
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'INFO',
'propagate': True
},
}
}
最后的结果是:
2018-06-15 17:40:55,724 [MainThread] [base_views:get] [INFO]- get message correct
INFO:base_views:get message correct
所以我该怎么做才能解决这个问题。
谢谢你
您只配置了 django
记录器,而不是根记录器。当 Tornado 发现根记录器未配置时,它会添加自己的最后处理程序(使用 logging.basicConfig
而不是 tornado.log
)。由于 python 记录器传播的方式,这会导致任何其他记录器被复制。
当您使用 tornado.options.options.logging = None
时,您应该确保自己配置根记录器,或者使用 propagate=False
配置所有其他处理程序。在这种情况下,将配置的 loggers.django
部分移动到新的 root
部分:
'handlers': {...}
'root': {
'handlers': ['console'],
'level': 'INFO',
},
在我的项目中,我用tornado服务器部署了我的django项目,我的tornado主要功能是:
def main():
tornado.options.options.logging = None
tornado.options.parse_command_line()
os.environ['DJANGO_SETTINGS_MODULE'] = 'Zero.settings'
application = get_wsgi_application()
container = tornado.wsgi.WSGIContainer(application)
http_server = tornado.httpserver.HTTPServer(container, xheaders=True)
http_server.listen(tornado.options.options.port)
tornado.ioloop.IOLoop.current().start()
当我使用 tornado.options.options.logging = None
禁用龙卷风日志输出,但它仍然在我的控制台中输出日志消息两次时,我的 django 日志配置是:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(threadName)s] [%(name)s:%(funcName)s] [%(levelname)s]- %(message)s'}
},
'filters': {
},
'handlers': {
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'log', 'error.log'),
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'console':{
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'INFO',
'propagate': True
},
}
}
最后的结果是:
2018-06-15 17:40:55,724 [MainThread] [base_views:get] [INFO]- get message correct
INFO:base_views:get message correct
所以我该怎么做才能解决这个问题。 谢谢你
您只配置了 django
记录器,而不是根记录器。当 Tornado 发现根记录器未配置时,它会添加自己的最后处理程序(使用 logging.basicConfig
而不是 tornado.log
)。由于 python 记录器传播的方式,这会导致任何其他记录器被复制。
当您使用 tornado.options.options.logging = None
时,您应该确保自己配置根记录器,或者使用 propagate=False
配置所有其他处理程序。在这种情况下,将配置的 loggers.django
部分移动到新的 root
部分:
'handlers': {...}
'root': {
'handlers': ['console'],
'level': 'INFO',
},