Uso¶
Registro automático¶
Quando o Django carrega o app, os signals task_success e task_failure do Celery criam registros em TaskLog automaticamente.
Tasks com sucesso¶
Tasks com sucesso armazenam o resultado serializado quando possível. Se o resultado contiver duration_s, duration_secs ou um valor duration parseável, o app armazena duration_secs para estatísticas.
Ignorar log intencionalmente¶
Para evitar o log de uma task com sucesso que foi intencionalmente ignorada, retorne um dicionário com ignore_task_log:
return {"status": "skipped", "ignore_task_log": True}
Tracebacks de falha¶
Tasks com falha armazenam:
Tipo da exceção.
Mensagem da exceção.
Frames da stack.
Variáveis locais sanitizadas no contexto do frame.
Task de limpeza¶
Para remover logs antigos, agende a task incluída no Celery beat ou chame-a diretamente:
from django_celery_logs.tasks import clear_celery_task_logs
clear_celery_task_logs.delay()
Helper de lock¶
Use acquire_lock_or_fail para ignorar trabalho quando outra task já possui um lock baseado em cache:
from celery.utils.log import get_task_logger
from django_celery_logs.utils import acquire_lock_or_fail
logger = get_task_logger(__name__)
@app.task(bind=True)
def import_items(self):
skipped = acquire_lock_or_fail(self, "import-items", timeout=300, logger=logger)
if skipped:
return skipped
# process the task here
return {"status": "ok"}