I have never used Async, so I didn’t know about that module. It seems quite close to what I had in mind, and provides most of what easy_logging does, and much more.
Instead of instantiating modules (like Log.Global) as so called logging singletons, Easy_logging instantiates logger objects:
logger = Logging.make_logger "my_logger" (Some Debug) [Cli Debug];;
This is by design, since logger objects are registered and stored at creation (in a Logging module), to be able to modify the log level all logging singletons at runtime (see Logging module and example).
(Maybe I’ll switch to modules instead of classes as logging singletons, using first-class modules to registration, but for now it’s a bit easier for me to go with objects).
The second difference is that a Logging module can be created by a functor over a module of Handlers (things to write to stdout/files/etc), making it easy to define the handlers according to your needs (although Async’s log defaults seems quite enough).
Anyway Async’s Logging will be a great source of inspiration for me, thanks for pointing it out !