python记录写入到多个单独的日志文件中



我有一个Django Web应用程序,该应用程序运行了一堆助手脚本。这些脚本中的每一个都编写自己的日志。我注意到脚本正在写信给对方的日志。这些脚本由单独的用户/会话启动。怎么了?

这是Scripta中的记录器的实现

import logging
   logging.basicConfig(format='%(asctime)s %(message)s',filename='/var/logs/scriptA.log',level=logging.DEBUG)  
  logging.info("INFO: test log from scriptA"))

对于scriptb相同,但说某人运行scriptb,它写入scripta.log而不是scriptb.log

似乎创建了一个共享的全局模块。我该如何停止此

编辑:此处的大多数解决方案都是同一类中的2个单独的日志。我的问题是单独的脚本/类互相写入日志

是的,Python的日志记录模块是一个全局模块。我以前遇到了同一问题。我使用此代码将每个模块/类的日志分开。

import logging
import sys
class SampleCass:
    def __init__(self):
        self.set_logger()
        self.log = logging.getLogger(__name__)
    @run_one
    def set_logger():
        # this separates the logging from different modules
        logger = logging.getLogger(__name__)
        console_handler = logging.StreamHandler(sys.stdout)
        logger.setLevel(logging.DEBUG)
        formatter = logging.Formatter('[%(asctime)s %(levelname)s ' +
                                      '%(name)s]: %(message)s',
                                      '%Y-%m-%d %H:%M:%S')
        console_handler.setFormatter(formatter)
        # add the handler to the class logger
        logger.addHandler(console_handler)
def run_once(func):
    """
    A decorator to run function only once
    :type func: __builtin__.function
    :return:
    """
    def wrapper(*args, **kwargs):
        """
        :param args:
        :param kwargs:
        :return:
        """
        if not wrapper.has_run:
            wrapper.has_run = True
            return func(*args, **kwargs)
    wrapper.has_run = False
    return wrapper

现在您可以将self.log用于班级,并且不会干扰其他模块的记录。run_one函数可确保当您导入函数时,它将仅运行一次。希望它对您有帮助。

最新更新