Hi,
First of all, I never saw any errors in event.log, AFAIK it only logs changes in state of items/things.
So you can focus on openhab.log I guess.
My approach is far less complex then what was debated here, but maybe someone cares for it, so here it is:
rule "LogReader"
when
Channel 'logreader:reader:openhablog:newErrorEvent' triggered or
Channel 'logreader:reader:openhablog:newWarningEvent' triggered
then
if(DebounceLogs.state != ON){
smtp.sendMail("email@server.net", "openHAB Alert - New Error Occured", "Errors are in the log!")
DebounceLogs.sendCommand(ON)}
This is done by utilizing logreader binding.
I use debounce on 20min, in case of some error flooding the log, my mailbox does not get flooded.
Of course, you can use other channels like telegram/whatsapp and the likes.
I didnt bother extracting the error message itself (even though I guess it could be done via the same binding), because my system can go for days/weeks without writing an error.
So when it happens, I have vpn, then ssh access from my android phone, and then alias command “ologs” tails the last X lines of openhab.log. I also have elogs alias for tailing event log.
So it takes me few seconds from receiving the email alert, to seeing the actual error.
at this point, I don’t remember if I created the alias commands or they come standard 
Just a side note, I did filter out some useless errors that regularly pop up from certain bindings (blocking them from writing to openhab.log file via log4j2.xml)