Will you then be able to get fully inlined low overhead ringbuffer logging throughout the application and used frameworks? E.g. do low level logging to a ringbuffer that is only saved/mailed upon fatal crashes. This is useful for online services.

Yes, apart from the inlined part, I'm not sure what the compiler does with virtual functions.

But can you do it without modifying the user code?

Ideally, one could control how logging happens without having to change the code that requests the logging.  This is important for cases like when you have a library that uses logging, and you need to make it conform without digging into its guts.

I believe to do this with the current setup, you would need some standard 'dispatcher' logger, and have every user of logging use it.  Then could configure the dispatcher as needed for your case without modifying all the code to use a different logger.

Ideally this standard setup would be the default/recommended way to use the logging library - any thoughts on how to do this properly (and maybe get inlining/templating)?