当程序作为守护程序运行时,无法找到记录器“LOGGER_NAME”的处理程序

时间:2013-08-04 14:10:46

标签: python logging python-2.7 python-daemon

有关讯息的问题

  

找不到记录器“X”的处理程序

来自Python的logging模块的

在SO上似乎很常见,但我还没有找到一个解决我案例的问题。

我的应用程序在作为守护程序运行时只有这个问题,因此我假设我没有在那里正确设置。我在Python 2.7中使用python-daemon包。

我的__init__.py文件使用以下函数初始化记录器:

def init_logger(logger_name, log_file):
    '''
    Returns: (Logger, [LoggerFH])
    '''
    logger = logging.getLogger(logger_name)

    ch = logging.StreamHandler()


    ch.setLevel(level=logging.DEBUG)
    fh = logging.FileHandler(log_file)
    fh.setLevel(level=logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
    fh.setFormatter(formatter)

    logger.addHandler(fh)
    return logger, [fh, ch]

以下列方式调用该函数:

logger, logger_fhs = init_logger('logger_name', 'logger_file_path')

然后守护进程初始化如下:

context = daemon.DaemonContext(
              files_preserve=map(operator.attrgetter('stream'), logger_fhs)
          )
with context:
    bombs_away(args) # This application does not actually launch any bombs :)

我错过了什么?我还可以检查什么来查找消息来源?

1 个答案:

答案 0 :(得分:1)

我的一个模块尝试调用记录器并在导入时间内记录一条消息,该消息将在init_logger被调用之前。