Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 flask的日志记录问题_Python_Logging_Flask - Fatal编程技术网

python flask的日志记录问题

python flask的日志记录问题,python,logging,flask,Python,Logging,Flask,我正在尝试使用dictConfig和配置sqlalchemy日志等配置我的flask应用程序 我有一个yaml文件,如下所示 version: 1 root: handlers: [console] level: INFO loggers: sqlalchemy.engine: level: WARN propagate: false handlers: [] clportal: level: INFO handlers: [cons

我正在尝试使用dictConfig和配置sqlalchemy日志等配置我的flask应用程序

我有一个yaml文件,如下所示

version: 1

root:
  handlers: [console]
  level: INFO


loggers:
  sqlalchemy.engine:
    level: WARN
    propagate: false
    handlers: []
  clportal:
    level: INFO
    handlers: [console]
    propagate: false

handlers:
  console:
    class: logging.StreamHandler
    formatter: standard
    level: INFO
    stream: ext://sys.stdout

formatters:
  standard:
    format: '%(asctime)s %(levelname)-8s %(name)-10s: %(message)s'
我通过执行以下操作来记录:

def create_app():
    app = Flask('clportal')
    configure_logging()
    app.logger.info('from app.logger')
    app.config.from_pyfile('config.py')
    app.secret_key = app.config["SECRET_KEY"]
    finjector = FlaskInjector(app=app, modules=[ConfigurationModule(app)])
    app.injector = finjector
    #app.logger.setLevel(app.config['LOG_LEVEL'])
    # add stdout handler (used for docker etc)
    #stdout_handler = logging.StreamHandler(sys.stdout)
    # stdout_handler.setFormatter(logging.Formatter('%(message)s'))
    #app.logger.addHandler(stdout_handler)
    #app.logger.info('Set up correctly now?')
    return app


def configure_logging():
    logging.config.dictConfig(yaml.load(open(os.path.join(APP_PATH, 'logconfig.yml'), 'r')))
通过app.logger.info进行日志记录,仅当我在create_app函数中注释掉那些LLINE时才有效

我希望能够通过yaml文件配置所有日志记录。你知道为什么这样不行吗


这是因为
app.logger
的名称实际上不是
“app.logger”
。如果您尝试打印
app.logger.name
,您将找到它的真名。您应该在
logconfig.yml
中使用此名称,例如:

loggers:
  sqlalchemy.engine:
    level: WARN
    propagate: false
    handlers: []
  real_name:
    level: INFO
    handlers: [console]
    propagate: false
或者,您可以使用自定义记录器替换默认记录器:

# python scirpt
logger = logging.getLogger("what_ever_you_want")
app.logger = logger

# logconfig.yml
loggers:
  sqlalchemy.engine:
    level: WARN
    propagate: false
    handlers: []
  what_ever_you_want:
    level: INFO
    handlers: [console]
    propagate: false

我试着把它作为第一步,但那对我来说不起作用

相反,我发现要做到以下几点。通过使用语句访问app.logger启动默认记录器,然后使用yaml文件运行配置日志记录,一切都会好起来。如果我在创建应用程序之前通过yaml进行了配置(如帮助中所述),它将不会覆盖默认处理程序

def create_app():
    app = Flask('clportal')
    app.logger.info('initing app.logger')
    logging.config.dictConfig(yaml.load(open(os.path.join(APP_PATH, 'logconfig.yml'), 'r')))
    app.logger.info('app logger has now been reset')
    app.config.from_pyfile(os.path.join(APP_PATH, 'config.py'))
    app.secret_key = app.config["SECRET_KEY"]
    finjector = FlaskInjector(app=app, modules=[ConfigurationModule(app)])
    app.injector = finjector
    return app

if __name__ == '__main__':
    create_app().run()
还有我的工作

version: 1
disable_existing_loggers: true
root:
  handlers: [console]
  level: INFO


loggers:
  sqlalchemy.engine:
    level: WARN
    propagate: false
    handlers: []
  clportal:
    level: INFO
    handlers: [console]
    propagate: false

handlers:
  console:
    class: logging.StreamHandler
    formatter: standard
    level: INFO
    stream: ext://sys.stdout

formatters:
  standard:
    format: '%(asctime)s %(levelname)-8s %(name)-10s: %(message)s'

谢谢@sraw我已正确设置了名称,但仍然没有骰子。在上面添加了一个屏幕截图,以查看实际存在的内容。似乎被覆盖了?@Cameron所以我认为你已经解决了这个问题?你介意接受我的回答吗?