There are definately alot of opinions on auditing. I think it would be good to know a couple things first.

How often will you need to dig through the audit logs?
Is space or performance an issue?
How easy does digging through the audit log need to be?

My preference is trigger based auditing.

It can be as simple as 1 audit table with

source table
when_changed
who_changed
data_before_change

If you don't have to audit often, this is a fairly simple way to just store what you need.

If you audit often and space is not an issue, copy the data into a structure that looks exactly the same (table_source and table_source_aud for example), with the addition of a Changed_by and a Change_date_time column. Then you can just outer join the two tables together w/ nvl(changed_by,'Current') to distinguish current rows from previously modified rows.

Ken