sanic==0.8.0配置自定义日志路径后未生成对应日志文件问题咨询
问题原因
- 处理器类型错误:当前配置中所有日志处理器的类均为
logging.StreamHandler,该类仅负责将日志输出到控制台标准流(stdout/stderr),本身不识别filename参数,即使配置了该字段也不会写入文件。 - 日志级别不匹配:root logger默认配置的级别为
INFO,而业务代码中使用logger.debug()输出日志,DEBUG级别优先级低于INFO,默认会被过滤,即使后续配置正确也无法输出DEBUG级别的日志。 - 冗余配置冲突:应用启动时传入了
access_log=False参数,会直接禁用sanic.access日志链路,对应配置的access_console处理器不会生效。
解决方案
直接修改custom_logger的配置,替换处理器类型、调整日志级别即可,修改后的app_runner.py代码如下:
from app_name import create_app_instance from sanic.log import LOGGING_CONFIG_DEFAULTS app = create_app_instance() custom_logger = LOGGING_CONFIG_DEFAULTS # 替换StreamHandler为FileHandler,删除无用的stream参数 custom_logger['handlers']['access_console']['class'] = 'logging.FileHandler' custom_logger['handlers']['access_console']['filename'] = '/Users/username/root.log' del custom_logger['handlers']['access_console']['stream'] custom_logger['handlers']['console']['class'] = 'logging.FileHandler' custom_logger['handlers']['console']['filename'] = '/Users/username/access.log' del custom_logger['handlers']['console']['stream'] custom_logger['handlers']['error_console']['class'] = 'logging.FileHandler' custom_logger['handlers']['error_console']['filename'] = '/Users/username/error.log' del custom_logger['handlers']['error_console']['stream'] # 调整root日志级别为DEBUG,输出debug级别的日志 custom_logger['loggers']['root']['level'] = 'DEBUG' if __name__ == '__main__': # 如果需要输出access日志,将access_log改为True即可 app.run(debug=True, log_config=custom_logger, access_log=False)
验证方法
启动应用后访问接口,查看/Users/username目录下是否生成对应的三个日志文件,access.log中会包含代码中输出的DEBUG级别的业务日志。
内容的提问来源于stack exchange,提问作者vector8188
相关产品推荐
相关产品推荐

