3737 _format_stack ,
3838)
3939from ._log_levels import NAME_TO_LEVEL , add_log_level
40- from ._utils import get_processname
40+ from ._utils import get_processname , get_taskname
4141from .tracebacks import ExceptionDictTransformer
4242from .typing import (
4343 EventDict ,
@@ -736,6 +736,8 @@ class CallsiteParameter(enum.Enum):
736736 PROCESS = "process"
737737 #: The name of the process the callsite was executed in.
738738 PROCESS_NAME = "process_name"
739+ #: The name of the asynchronous task the callsite was executed in.
740+ TASK_NAME = "task_name"
739741
740742
741743def _get_callsite_pathname (module : str , frame : FrameType ) -> Any :
@@ -774,6 +776,10 @@ def _get_callsite_process_name(module: str, frame: FrameType) -> Any:
774776 return get_processname ()
775777
776778
779+ def _get_callsite_task_name (module : str , frame : FrameType ) -> Any :
780+ return get_taskname ()
781+
782+
777783class CallsiteParameterAdder :
778784 """
779785 Adds parameters of the callsite that an event dictionary originated from to
@@ -826,6 +832,7 @@ class CallsiteParameterAdder:
826832 CallsiteParameter .THREAD_NAME : _get_callsite_thread_name ,
827833 CallsiteParameter .PROCESS : _get_callsite_process ,
828834 CallsiteParameter .PROCESS_NAME : _get_callsite_process_name ,
835+ CallsiteParameter .TASK_NAME : _get_callsite_task_name ,
829836 }
830837 _record_attribute_map : ClassVar [dict [CallsiteParameter , str ]] = {
831838 CallsiteParameter .PATHNAME : "pathname" ,
@@ -837,6 +844,7 @@ class CallsiteParameterAdder:
837844 CallsiteParameter .THREAD_NAME : "threadName" ,
838845 CallsiteParameter .PROCESS : "process" ,
839846 CallsiteParameter .PROCESS_NAME : "processName" ,
847+ CallsiteParameter .TASK_NAME : "taskName" ,
840848 }
841849
842850 _all_parameters : ClassVar [set [CallsiteParameter ]] = set (CallsiteParameter )
@@ -882,9 +890,12 @@ def __call__(
882890 # then the callsite parameters of the record will not be correct.
883891 if record is not None and not from_structlog :
884892 for mapping in self ._record_mappings :
885- event_dict [mapping .event_dict_key ] = record .__dict__ [
893+ # Careful since log record attribute taskName is only
894+ # supported as of python 3.12
895+ # https://docs.python.org/3.12/library/logging.html#logrecord-attributes
896+ event_dict [mapping .event_dict_key ] = record .__dict__ .get (
886897 mapping .record_attribute
887- ]
898+ )
888899 else :
889900 frame , module = _find_first_app_frame_and_name (
890901 additional_ignores = self ._additional_ignores
0 commit comments