如何从 celery pprint 输出中删除时间戳?

2024-01-11

运行 celeryworker 时,每行输出pprint始终以时间戳为前缀,并且也会被删除。这使得它非常不可读:

[2015-11-05 16:01:12,122: WARNING/Worker-2] {
[2015-11-05 16:01:12,122: WARNING/Worker-2] u'key1'
[2015-11-05 16:01:12,122: WARNING/Worker-2] :
[2015-11-05 16:01:12,122: WARNING/Worker-2] 'value1'
[2015-11-05 16:01:12,122: WARNING/Worker-2] ,
u'_id':
[2015-11-05 16:01:12,122: WARNING/Worker-2] ObjectId('55fff3b74322c53d18ae4687')
...

有没有办法告诉 celery 不要格式化输出pprint?

UPDATE:

这个问题问得有点不对。所需的输出将如下所示:

[2015-11-05 16:01:12,122: WARNING/Worker-2] 
{
    u'key1': 'value1',
    u'_id': ObjectId('55fff3b74322c53d18ae4687'),
    ...

正如 @xbirkettx 提到的,输出格式定义在CELERYD_LOG_FORMAT设置,默认为[%(asctime)s: %(levelname)s/%(processName)s] %(message)s.

因此,在您的设置中:

CELERYD_LOG_FORMAT = '[%(levelname)s/%(processName)s] %(message)s'

任务内记录器还有一个特殊设置,默认为:

CELERYD_TASK_LOG_FORMAT = [%(asctime)s: %(levelname)s/%(processName)s]
[%(task_name)s(%(task_id)s)] %(message)s

去除asctime键摆脱时间戳。文档上CELERYD_TASK_LOG_FORMAT http://docs.celeryproject.org/en/latest/configuration.html#celeryd-log-format.

Update

来自docs http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging:

您还可以使用print(),就像写入标准输出/-err 的任何内容一样 将被重定向到日志系统(您可以禁用它,请参阅CELERY_REDIRECT_STDOUTS).

所以,而不是打电话pprint.pprint,最好用以下方式格式化字符串pprint.pformat然后记录它。

@periodic_task(run_every=timedelta(seconds=10))
def pprint_dict2():
    import pprint
    values = {
        u'key1': 'value1',
        u'_id1': "ObjectId('55fff3b74322c53d18ae4687')",
        u'key2': 'value2',
        u'_id2': "ObjectId('55fff3b74322c53d18ae4687')",
        u'key3': 'value3',
        u'_id3': "ObjectId('55fff3b74322c53d18ae4687')",
        u'key4': 'value4',
        u'_id3': "ObjectId('55fff3b74322c53d18ae4687')",
    }
    s = pprint.pformat(values, width=1)
    print(s)  # or even better logger.info(...)

Output:

[WARNING/Beat] {u'_id1': "ObjectId('55fff3b74322c53d18ae4687')",
 u'_id2': "ObjectId('55fff3b74322c53d18ae4687')",
 u'_id3': "ObjectId('55fff3b74322c53d18ae4687')",
 u'key1': 'value1',
 u'key2': 'value2',
 u'key3': 'value3',
 u'key4': 'value4'}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 celery pprint 输出中删除时间戳? 的相关文章

随机推荐