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"}