【问题标题】:Python Flask logging to multiple filesPython Flask 记录到多个文件
【发布时间】:2021-08-01 19:45:03
【问题描述】:

我有一个烧瓶应用程序,它从 2 个不同的文件调用 2 个函数。 我已将日志记录设置到 2 个不同的文件。 但是,日志记录似乎总是附加到一个文件(无论哪个端点首先命中)

这是文件的结构-

  • app.py
from file1 import fun1
from file2 import fun2
 
@app.route("/end_point1")
def data_1:
    return fun1()
     
@app.route("/end_point2")
def data_2:
    return fun2()
  • file1.py
import logging

def fun1:
    logging.basicConfig(filename = "file1.log")
    logging.info("Logging function 1 details to to file1")
    return foo
  • file2.py
def fun2:
    logging.basicConfig(filename = "file2.log")
    logging.info("Logging function 2 details to to file2")
    return bar

当我运行单个 python 文件 - file1.py / file2.py 时,这记录很好(单独) 但是当我运行 API 时,日志只附加到一个文件中。

我在日志记录方面做错了什么?我该如何解决?

【问题讨论】:

    标签: flask logging python-3.7 flask-admin logfile


    【解决方案1】:

    将此添加到 logger_setup.py

    import logging
    from pathlib import Path
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s')
    
    
    def setup_logger( name, log_file, level=logging.DEBUG): 
    
        my_file = Path(log_file)
        # print("check the if condition for the file")
        # print(my_file.is_file())
    
        if my_file.is_file():
            #print(logging.getLogger(name).hasHandlers())
            # if logging.getLogger(name).hasHandlers():
            if len(logging.getLogger(name).handlers)>0:
                return logging.getLogger(name)
            else:
                handler = logging.FileHandler(log_file, mode='a')        
                handler.setFormatter(formatter)
                logger = logging.getLogger(name)
                logger.setLevel(level)
                logger.addHandler(handler)
                logger.propagate = False
                return logger
        else:
            handler = logging.FileHandler(log_file, mode='a')        
            handler.setFormatter(formatter)
    
            logger = logging.getLogger(name)
            logger.setLevel(level)
            logger.addHandler(handler)
            logger.propagate = False
            return logger
    

    在文件 1 和 2 中你可以使用类似这样的东西

    import logging
    import logger_setup
    
    def fun1():
        log_location = 'logs'
        logger = logger_setup.setup_logger(__name__,log_location+__name__+'.log')
        logger.info("Logging function 1 details to to file1")
        return "1"
    

    【讨论】:

    • 如果这个答案有帮助,请告诉我。
    猜你喜欢
    • 2011-07-31
    • 2011-01-03
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多