I have done both using triggers and functions for audit trails but for last_updated_by you can capture the current _user if needed and for last_updated_at, now should suffice... my 2 cents....
Are you able to share a bit more information on your approach? Did you create triggers at the PostgreSQL level? If so, did you create from within an App?
Re capturing current_user - do you do that explicitly as a separate process? For the app I'm initially looking at, I am using Bulk update via a primary key for updates (for inline table updates) and using the {{table_name.changesetArray}} which has the PK and changes, but not current_user.
Do I need a transformer or something similar to append the current_user to the array?
You'd need to append the current user to each object in your array, I think - so a map function would be good here and saves writing another transformer