如何使用单个configfile.properties配置文件实现多日志文件分别输出?
实现方案
完全可以通过单个configfile.properties配置文件实现不同API日志输出到独立文件的需求,具体修改方式如下:
第一步:修改配置文件
你需要在原有配置基础上新增多个独立的FileHandler,以及对应绑定Handler的Logger实例,修改后的配置示例如下:
[loggers] keys=root,api1Logger,api2Logger,api3Logger [handlers] keys=fileHandler1,fileHandler2,fileHandler3 [formatters] keys=myFormatter [logger_root] level=INFO handlers=fileHandler1 [logger_api1Logger] level=INFO handlers=fileHandler1 propagate=0 [logger_api2Logger] level=INFO handlers=fileHandler2 propagate=0 [logger_api3Logger] level=INFO handlers=fileHandler3 propagate=0 [handler_fileHandler1] class=FileHandler level=INFO formatter=myFormatter args=("/opt/myfile1.log",) [handler_fileHandler2] class=FileHandler level=INFO formatter=myFormatter args=("/opt/myfile2.log",) [handler_fileHandler3] class=FileHandler level=INFO formatter=myFormatter args=("/opt/myfile3.log",) [formatter_myFormatter] format=%(process)d-%(levelname)s-%(asctime)s %(name)s->%(funcName)s->%(lineno)-d: %(message)s
配置中的
propagate=0是为了避免子Logger的日志同步传递到rootLogger,造成日志重复写入的问题。
第二步:代码中调用对应Logger
加载配置的逻辑不需要改动,只需要在调用不同API的业务代码中,获取对应名称的Logger实例打印日志即可:
import logging import logging.config # 加载配置逻辑保持不变 logging.config.fileConfig(fname='configfile.properties', disable_existing_loggers=False) # 调用API1时使用该Logger,日志会写入myfile1.log api1_logger = logging.getLogger("api1Logger") # 调用API2时使用该Logger,日志会写入myfile2.log api2_logger = logging.getLogger("api2Logger") # 调用API3时使用该Logger,日志会写入myfile3.log api3_logger = logging.getLogger("api3Logger")
- 后续如果需要新增更多API的独立日志文件,只需按照上述规则新增对应Handler和Logger配置项即可,无需调整配置加载逻辑。
内容的提问来源于stack exchange,提问作者lida
相关产品推荐
相关产品推荐

