@roman It is important that to recognize a change, you will need both the previous state and the current state. I recommended just storing the full scene in the previous state because then you are guaranteed to have all data available.
Of course, you may say "a full scene is too much, I just want to remember the previous state of the logged data snippets", but then you will still need to store these somewhere, and you'd end up with needing a file format of your own to store them to disk.
(You can store the old state in the scene by defining your own data set with all store/load functions, but good grief, what an effort! ;-) )
You will not escape the necessity to "remember in some form" the old states when you press your button. Losing that information means you don't have anything to compare against. Unless you want to monitor the full system, but I really don't think that is feasible.
Let me question something... do you really need to log the CHANGES? What you want is to store the "important parameters" of certain objects, which - looking at it realistically - will be a very small subset of all the data. (Havng a log that tells you e.g. that point 4837 in object xyz has been moved from position (0, 5.991, 7.634) to position (0.772, 5.991, 7.634) is going to be so large and overwhelming that it becomes utterly useless.)
Why don't you just put ALL the CURRENT data for these objects into the tag? So the annotation would say "the camera is x; the color of the flower is blue; the background is mybgr.hdri". No comparison, just the current data that you are using for this render.
It boils down to a deeper question: What is your usecase? How do you expect to use that data later on? Which data would be most useful in that situation?