3636 _format_stack ,
3737)
3838from ._log_levels import NAME_TO_LEVEL , add_log_level
39- from ._utils import get_processname
39+ from ._utils import get_processname , get_taskname
4040from .tracebacks import ExceptionDictTransformer
4141from .typing import (
4242 EventDict ,
@@ -757,6 +757,8 @@ class CallsiteParameter(enum.Enum):
757757 PROCESS = "process"
758758 #: The name of the process the callsite was executed in.
759759 PROCESS_NAME = "process_name"
760+ #: The name of the asynchronous task the callsite was executed in.
761+ TASK_NAME = "task_name"
760762
761763
762764def _get_callsite_pathname (module : str , frame : FrameType ) -> Any :
@@ -799,6 +801,10 @@ def _get_callsite_process_name(module: str, frame: FrameType) -> Any:
799801 return get_processname ()
800802
801803
804+ def _get_callsite_task_name (module : str , frame : FrameType ) -> Any :
805+ return get_taskname ()
806+
807+
802808class CallsiteParameterAdder :
803809 """
804810 Adds parameters of the callsite that an event dictionary originated from to
@@ -853,6 +859,7 @@ class CallsiteParameterAdder:
853859 CallsiteParameter .THREAD_NAME : _get_callsite_thread_name ,
854860 CallsiteParameter .PROCESS : _get_callsite_process ,
855861 CallsiteParameter .PROCESS_NAME : _get_callsite_process_name ,
862+ CallsiteParameter .TASK_NAME : _get_callsite_task_name ,
856863 }
857864 _record_attribute_map : ClassVar [dict [CallsiteParameter , str ]] = {
858865 CallsiteParameter .PATHNAME : "pathname" ,
@@ -864,6 +871,7 @@ class CallsiteParameterAdder:
864871 CallsiteParameter .THREAD_NAME : "threadName" ,
865872 CallsiteParameter .PROCESS : "process" ,
866873 CallsiteParameter .PROCESS_NAME : "processName" ,
874+ CallsiteParameter .TASK_NAME : "taskName" ,
867875 }
868876
869877 _all_parameters : ClassVar [set [CallsiteParameter ]] = set (CallsiteParameter )
@@ -913,9 +921,12 @@ def __call__(
913921 # then the callsite parameters of the record will not be correct.
914922 if record is not None and not from_structlog :
915923 for mapping in self ._record_mappings :
916- event_dict [mapping .event_dict_key ] = record .__dict__ [
924+ # Careful since log record attribute taskName is only
925+ # supported as of python 3.12
926+ # https://docs.python.org/3.12/library/logging.html#logrecord-attributes
927+ event_dict [mapping .event_dict_key ] = record .__dict__ .get (
917928 mapping .record_attribute
918- ]
929+ )
919930
920931 return event_dict
921932
0 commit comments