Earlier quoted context omitted.
The keyword there is informed. There are still plenty of shops that practice OOP this way. I'm working at one right now and there are OOP horrors around every corner. Unfortunately, they seem intent on adding more mutable state rather then eliminating it.
Do you have anecdotes you can share? :D
Being encapsulated means you don't actually have any control over the logger, or the threads it spins up. Creating a logger for a new app requires inheriting from a application logger (which is already 3 or 4 layers deep in the inheritance hierarchy.
The distinction other loggers make between the log interface and the appenders are non-existent. If you want to log to a new source (say the event log) you have to add a new layer to the inheritance tree.
Then there's the fact that it's handling the application state, in an "on error resume next" kind of way. And this is a global state, so don't even think about multi threading.
Naturally, actually accessing the logger is done via a singleton.
It causes more problems than it helps resolve, and the ones it causes naturally don't have an diagnostic information available.
There are plenty of others, but it's hard to top this tour de force of OO anti patterns. If only there was some free and stable alternative...