def iprint(*args, tabs=0, **kwargs):
    """Print with thread and task info,"""

    thread = threading.current_thread()
    thread_ident = thread.name

    try:
        task = asyncio.current_task()
        task_ident = task.get_name()
    except RuntimeError:
        task_ident = "no running loop"

    textbuffer = io.StringIO()

    print(*args, **kwargs, file=textbuffer, end="")

    text = textbuffer.getvalue()

    tabbed = text_utils.retab(
        text, tab=f"[{thread_ident}][{task_ident}]" + ("    " * tabs) + " "
    )

    print(tabbed)
Print with thread and task info,
src/core/trulens/core/_utils/debug.py