【问题标题】:Use process name generated by supervisord in child process logging在子进程日志记录中使用 supervisord 生成的进程名称
【发布时间】:2014-06-13 15:14:44
【问题描述】:

我想在子进程日志记录中使用子进程的名称(例如“mysuperservice_1”、“mysuperservice_2”等...)。使用 python 构建的服务。

我该怎么做?蒂亚! =)

EDIT1

我的 supervisord 配置如下:

[program:superservice]
command = python manage.py superservice
process_name=%(program_name)s_%(process_num)s
autostart=true
autorestart=true
numprocs=4
stdout_logfile=spool/logs/superservice.log
stderr_logfile=spool/logs/superservice.error.log

它会产生这样的过程:

dizpers   4912  0.3  0.5 170472 21976 ?        Sl   22:09   0:00 python manage.py superservice
dizpers   4913  0.3  0.5 170476 22520 ?        Sl   22:09   0:00 python manage.py superservice
dizpers   4920  0.2  0.5 170476 22524 ?        Sl   22:09   0:00 python manage.py superservice
dizpers   4926  0.3  0.5 170476 22432 ?        Sl   22:09   0:00 python manage.py superservice

所以,我不能简单地获取进程名称(例如,通过 psutil 模块)。我需要以某种方式通过 supervisord 获得它。

【问题讨论】:

    标签: python logging supervisord


    【解决方案1】:

    如果您不使用multiprocessing,则进程名称通常始终为MainProcess。要覆盖它,您可以向适当的处理程序添加一个过滤器,其工作方式如下:

    import os, logging
    class SupervisorProcessFilter(logging.Filter):
        def filter(self, record):
            record.processName = os.environ['SUPERVISOR_PROCESS_NAME']
            return True
    

    然后按照 Hai Vu 的建议,在格式字符串中使用 %(processName)

    【讨论】:

    • 谢谢! os.environ['SUPERVISOR_PROCESS_NAME'] 正是我需要的!我错过了supervisord docs
    【解决方案2】:

    在主代码中,配置日志格式为%(processName),例如:

    logging.basicConfig(
        level=logging.DEBUG,
        format='[%(levelname)s] (%(processName)s) %(message)s')
    

    那么,在子进程中:

    logging.debug('About to do XYZ')
    

    输出:

    [DEBUG] (mysuperservice_1) About to do XYZ
    

    【讨论】:

    • 你错了。使用您的方法,我将获得“MainProcess”作为进程名称。使用例如 psutil 模块(并通过 pid 获取进程名称)我将得到简单的“python”。它是所有服务的原因只是python myservice.py ...
    • 这是我工作代码的一部分。我正在使用multiprocessing 模块。原始帖子中甚至没有提到 psutil。
    • Hai Vu,我已经更新了原帖。谢谢通知 =)
    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2023-04-10
    • 2016-04-26
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多