POILogger/POILogFactory has a mechanism to allow users override the default logger. One problem is that POILogger needs to be subclassed but the contructor is not public - so users have to create the subclass in the org.apache.poi.util package.
Sorry to hijack that issue - but just when I wanted to commit the code and open a ticket before/for it - you've created it already ... I think the cleaner way is to use an interface instead of abstract class. Anything else should be the same. Applied via r1850040
Strictly speaking the latest revision is a breaking API change. Users who may have created their own subclasses of POILogger will find that code will not compile with this change. All that said, I think the intent is that the next release is 4.1.0 (as opposed to 4.0.2) - so it should be more acceptable to break APIs, particularly ones that are unlikely to affect many users.