### Body

The _trigger_ log doesn't show that a trigger timed out when it is canceled due to timeout.

We should try to see if we can add a log message that would show up in the right place.  If we emit it from the trigger process, it might show up out of order.  

But then again, if we ultimately don't need to go back to the task, that would not be a problem.  

Additionally if we ultimately can "log from anywhere" then again, this would provide a clean solution.

This came up in PR discussion here: https://github.com/apache/airflow/pull/30853#discussion_r1187018026

The relevant trigger code is here: https://github.com/apache/airflow/blob/main/airflow/jobs/triggerer_job_runner.py#L598-L619

I think we could add logic so that when we receive a cancelled error (which could be for a few different reasons) then we can log the reason for the cancellation.   I think we could just add an `except CancelledError` and then log the reason.  We might need also to update the code in the location where we actually _initiate_ the cancellation to add sufficient information for the log message.

cc @syedahsn @phanikumv @jedcunningham @pankajastro 

### Committer

- [X] I acknowledge that I am a maintainer/committer of the Apache Airflow project.
"""
        Drain the to_cancel queue and ensure all triggers that are not in the
        DB are cancelled, so the cleanup job deletes them.
        """
        while self.to_cancel:
            trigger_id = self.to_cancel.popleft()
            if trigger_id in self.triggers:
                
                self.triggers[trigger_id]["task"].cancel()
            await asyncio.sleep(0)
    async def cleanup_finished_triggers(self):
        """
        Go through all trigger tasks (coroutines) and clean up entries for
        ones that have exited, optionally warning users if the exit was
        not normal.
        """
        for trigger_id, details in list(self.triggers.items()):
            if details["task"].done():