Yes this can all be done. You would do it in the save method.
CLASS TCustomer from TRecord
  Method Save()
endclass
Method Save() Class TCustomer
  ::Updated:= date()
   // Compare all the data in ::aBuffer (new) with ::aBuffer (old)
   // Collect an array of fieldnames or numbers containing the different data
   // Loop through the array and make a string of the fieldnames and old and new data
   // Write the array to a log file.
Return super:Save()James