Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 日志记录(烧瓶/模块/调试)_Python_Python 3.x_Flask_Python Multithreading - Fatal编程技术网

Python 日志记录(烧瓶/模块/调试)

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

我在多线程规则引擎上有一个web UI。在大多数情况下,web UI旨在为规则引擎收集的数据提供标准CRUD服务,以及启动和关闭规则服务

我想将flask logger(当前应用程序记录器)连接到模块级日志输出,然后为每个正在运行的服务配置输出日志

失败的简单测试:
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)
也似乎失败了。