Это довольно просто делается через Doctrine lifecycle events. Вешаете обработчики на preUpdate, pretPersist, prePremove, собираете из переданных вам событий информацию для формирования нужного вам лога, затем в postFlush из собранной информации формируете запись в лог и записываете.