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 ,
@@ -735,6 +735,8 @@ class CallsiteParameter(enum.Enum):
735735 PROCESS = "process"
736736 #: The name of the process the callsite was executed in.
737737 PROCESS_NAME = "process_name"
738+ #: The name of the asynchronous task the callsite was executed in.
739+ TASK_NAME = "task_name"
738740
739741
740742def _get_callsite_pathname (module : str , frame : FrameType ) -> Any :
@@ -773,6 +775,10 @@ def _get_callsite_process_name(module: str, frame: FrameType) -> Any:
773775 return get_processname ()
774776
775777
778+ def _get_callsite_task_name (module : str , frame : FrameType ) -> Any :
779+ return get_taskname ()
780+
781+
776782class CallsiteParameterAdder :
777783 """
778784 Adds parameters of the callsite that an event dictionary originated from to
@@ -825,6 +831,7 @@ class CallsiteParameterAdder:
825831 CallsiteParameter .THREAD_NAME : _get_callsite_thread_name ,
826832 CallsiteParameter .PROCESS : _get_callsite_process ,
827833 CallsiteParameter .PROCESS_NAME : _get_callsite_process_name ,
834+ CallsiteParameter .TASK_NAME : _get_callsite_task_name ,
828835 }
829836 _record_attribute_map : ClassVar [dict [CallsiteParameter , str ]] = {
830837 CallsiteParameter .PATHNAME : "pathname" ,
@@ -836,6 +843,7 @@ class CallsiteParameterAdder:
836843 CallsiteParameter .THREAD_NAME : "threadName" ,
837844 CallsiteParameter .PROCESS : "process" ,
838845 CallsiteParameter .PROCESS_NAME : "processName" ,
846+ CallsiteParameter .TASK_NAME : "taskName" ,
839847 }
840848
841849 _all_parameters : ClassVar [set [CallsiteParameter ]] = set (CallsiteParameter )
@@ -881,9 +889,12 @@ def __call__(
881889 # then the callsite parameters of the record will not be correct.
882890 if record is not None and not from_structlog :
883891 for mapping in self ._record_mappings :
884- event_dict [mapping .event_dict_key ] = record .__dict__ [
892+ # Careful since log record attribute taskName is only
893+ # supported as of python 3.12
894+ # https://docs.python.org/3.12/library/logging.html#logrecord-attributes
895+ event_dict [mapping .event_dict_key ] = record .__dict__ .get (
885896 mapping .record_attribute
886- ]
897+ )
887898 else :
888899 frame , module = _find_first_app_frame_and_name (
889900 additional_ignores = self ._additional_ignores
0 commit comments