I had a short look into the LeadEvents::TIMELINE_ON_GENERATE event. I figured it lets you only hook into the contact’s history “log”, but not into the audit log (marked in the screenshot):
Oh, in that tab. It shows all audit log entries that are in the audit_log table for that contact, right? Why don’t you just store the information you want to see there in that table?
Well, of course. Your row must fit the where conditions as you mention in the forum post:
It should only show changes to the lead object. If it’s related to another object then it shouldn’t show up in the lead audit log. I’d re-consider if the entry shouldn’t show up in the timeline as that’s where all events related to the contact show up. But you know better what your use case is.