Python 日志记录(烧瓶/模块/调试)
我在多线程规则引擎上有一个web UI。在大多数情况下,web UI旨在为规则引擎收集的数据提供标准CRUD服务,以及启动和关闭规则服务 我想将flask logger(当前应用程序记录器)连接到模块级日志输出,然后为每个正在运行的服务配置输出日志 失败的简单测试:Python 日志记录(烧瓶/模块/调试),python,python-3.x,flask,python-multithreading,Python,Python 3.x,Flask,Python Multithreading,我在多线程规则引擎上有一个web UI。在大多数情况下,web UI旨在为规则引擎收集的数据提供标准CRUD服务,以及启动和关闭规则服务 我想将flask logger(当前应用程序记录器)连接到模块级日志输出,然后为每个正在运行的服务配置输出日志 失败的简单测试: rules.py测试功能: def stupid_logging_test(): logging.debug('Will flask log me?') admin.py: @admin.route('/', method
rules.py
测试功能:
def stupid_logging_test():
logging.debug('Will flask log me?')
admin.py
:
@admin.route('/', methods=['GET', 'POST'])
def admin_root():
#show the root admin page.
servers = current_app.config['instance_servers']
metrics = None
if len(servers):
metrics = compileMetrics(servers)
# this includes starting/stopping rules engine and metrics
adminform = ServerAdminForm(request.form)
if request.method == 'POST':
if adminform.startserver.data:
current_app.logger.info('performing rule server start.')
start_source_servers()
#current_app.logger.debug(pprint.pformat(form))
#current_app.logger.debug(str(tabledata))
elif adminform.stopserver.data:
current_app.logger.info('performing rule server stop.')
stop_source_servers()
#current_app.logger.debug(pprint.pformat(form))
#current_app.logger.debug(str(tabledata))
else:
current_app.logger.info('unknown submit?')
current_app.logger.debug('debug line test.')
rules.stupid_logging_test()
return render_template("admin_main.html", adminform=adminform,
metrics=metrics, servers=servers)
log_target = RotatingFileHandler(app.config['LOGFILE'], maxBytes=1024 * 1024 * 100, backupCount=20)
loggers = [app.logger, getLogger('rules')]
for logger in loggers:
if 'DEBUG' in app.config and app.config['DEBUG']:
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.WARN)
logger.addHandler(log_target)
app.config['core_log'] = log_target
日志输出(控制台):
最后是我的日志配置(到目前为止)
ui:\uuuuu init\uuuuuu.py
# ... other app config
log_target = RotatingFileHandler(app.config['LOGFILE'], maxBytes=1024 * 1024 * 100, backupCount=20)
if 'DEBUG' in app.config and app.config['DEBUG']:
log_target.setLevel(logging.DEBUG)
else:
log_target.setLevel(logging.WARN)
app.logger.addHandler(log_target)
rules_logger = getLogger('rules')
rules_logger.addHandler(log_target)
app.config['core_log'] = log_target
我觉得我的问题与getLogger方法有关。我没有给记录器一个名称,但我假设默认值是模块本身的名称?在处理程序上设置loglevel是不正确的。以下更改解决了该问题:
ui:\uuuu init\uuuu.py
:
@admin.route('/', methods=['GET', 'POST'])
def admin_root():
#show the root admin page.
servers = current_app.config['instance_servers']
metrics = None
if len(servers):
metrics = compileMetrics(servers)
# this includes starting/stopping rules engine and metrics
adminform = ServerAdminForm(request.form)
if request.method == 'POST':
if adminform.startserver.data:
current_app.logger.info('performing rule server start.')
start_source_servers()
#current_app.logger.debug(pprint.pformat(form))
#current_app.logger.debug(str(tabledata))
elif adminform.stopserver.data:
current_app.logger.info('performing rule server stop.')
stop_source_servers()
#current_app.logger.debug(pprint.pformat(form))
#current_app.logger.debug(str(tabledata))
else:
current_app.logger.info('unknown submit?')
current_app.logger.debug('debug line test.')
rules.stupid_logging_test()
return render_template("admin_main.html", adminform=adminform,
metrics=metrics, servers=servers)
log_target = RotatingFileHandler(app.config['LOGFILE'], maxBytes=1024 * 1024 * 100, backupCount=20)
loggers = [app.logger, getLogger('rules')]
for logger in loggers:
if 'DEBUG' in app.config and app.config['DEBUG']:
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.WARN)
logger.addHandler(log_target)
app.config['core_log'] = log_target
在rules.py中,
日志记录
等于什么?您将debug line test
记录到current_app.logger
中,但在rules.py中,您将其记录到您未提供的某个logging
变量中,如果它们不同,则显然它们将进入不同的日志。@Tadhgsen这只是日志模块。在我阅读的文档中,似乎对此有点困惑。如果您在一个模块中配置一个特定的记录器,建议的方法是执行mylogger=getLogger(\uuuu name\uuuu)
,但是直接使用日志模块而不配置特定的记录器似乎也是有效的。@Tadhgmald Jensen如上所述,模块级别logger=logging.getLogger(\uu name\uu)
也似乎失败了。