Maybe this will give you some ideas, it’s thrown together and needs more work but it might get you in the right direction.
The problem about retrieving entity information when something is undone , canceled or erased is that the reactor will return the entity name but the entity information will be nil.
Code:(vl-load-com) (defun OAcb (a b / nent) (setq nent (vl-princ-to-string(cadr b))) (princ (strcat nent " Added to Drawing")) );_defun (defun OEcb (a b / delent) (setq delent (vl-princ-to-string(cadr b))) (princ (strcat delent " Deleted From Drawing")) );_defun (if (not (= (type OArct) 'VLR-AcDb-Reactor)) (progn (setq OArct(vlr-acdb-reactor nil '((:vlr-objectAppended . OAcb)))) (setq OErct(vlr-acdb-reactor nil '((:vlr-objectErased . OEcb)))) );_progn );_if