inngest/inngest-py

Logging info

masylum opened this issue · 7 comments

Hey there!
I'm implementing a FastAPI application and it seems like none of my logging.info are working. This is what I currently have setup:

uvicorn_logger = logging.getLogger("uvicorn")
uvicorn_logger.setLevel(logging.DEBUG)

inngest_client = inngest.Inngest(
    app_id="test",
    logger=uvicorn_logger,
)

Am I holding it wrong?

Thanks in advance

Sorry you're having some trouble with the logger! I wasn't able to reproduce the issue on version 0.3.1 of Inngest, but I'll leave a minimal working example to give us some common code to work off.

Here's my app:

import inngest
import fastapi
import logging

import inngest.fast_api

uvicorn_logger = logging.getLogger("uvicorn")
uvicorn_logger.setLevel(logging.DEBUG)

# Create an Inngest client
inngest_client = inngest.Inngest(
    app_id="fast_api_example",
    logger=uvicorn_logger,
)

# Create an Inngest function
@inngest_client.create_function(
    fn_id="my-fn",
    trigger=inngest.TriggerEvent(event="foo"),
)
async def fn(
    ctx: inngest.Context,
    step: inngest.Step,
) -> None:
    ctx.logger.info("Hello world!")

app = fastapi.FastAPI()

# Serve Inngest endpoint
inngest.fast_api.serve(
    app,
    inngest_client,
    [fn],
)

I run my app:

(export INNGEST_DEV=1 && uvicorn main:app --reload)

I start the Dev Server with auto-discovery and polling disabled (to prevent a bunch of other logs from showing up in the app):

npx inngest-cli@latest dev --no-discovery --no-poll

I tell my app to sync itself with the Dev Server:

curl -X PUT localhost:8000/api/inngest

I send an event to trigger my Inngest function:

curl -X POST localhost:8288/e/foo -d '{"name": "foo"}'

In my app logs I see this:

INFO:     127.0.0.1:52638 - "PUT /api/inngest HTTP/1.1" 200 OK
INFO:     Hello world!
INFO:     127.0.0.1:52843 - "POST /api/inngest?fnId=fast_api_example-my-fn&stepId=step HTTP/1.1" 200 OK

oops, I was on 0.2 and following the latest documentation 🤦 Fixed!

No worries! 0.3 is pretty new

btw, it only works if I use ctx.logger, using logging.info does not

What do you mean by logging.info? Like this?

import logging

logging.info(2)

yes

I'm not a Python logging expert, but I thought that didn't work in general. If you run a Python script like this you won't see anything in your terminal:

import logging
logging.info("hi")

But even if that did work, you'd still want to use ctx.logger.info within an Inngest function. This will prevent duplicate logs since we actually execute your function multiple times (roughly once per step.* call)