ClassMethod LogException(
tAbsException As %Exception.AbstractException) As %Status
{
    
Do $System.Status.DecomposeStatus(tAbsException.AsStatus(), .errorList)
    For i=1:1:errorList {
                    Set fullError = errorlist(i)
                    Set tErrorCode = errorList(i, "code") 
                    You can get caller, domain, params etc from it too, 
                    Just print one errorList and you will see the values of your own error
                    Let me know if you need any help

                  }
    }

Thanx to all and esp to Eduard

I used a mix of Eduard's code, docs, EnsLib.PubSubOperation and some of my code

From my BP -  I am calling the PubSubBo with a response of arrays that gives me targets in a string array 

- BP then sends to all targets from a call inside a loop of targets array. The target of which is set dynamically from context of the loop element.

This gives me an extra functionality of putting some extra logic but most importantly in Visual Trace it doesn't look odd if target is a BP.
If target is a BP and it is forwarded to, from a normal pubsubBo then in visual trace it shows a backward arrrow which is hard to explain to non tech people as it seems its going backward not forward. So forwarding it to targets from a BP is a better and cleaner option .

Can share code to anyone if needed.