Not as easy as the name might claim. First of all, why do users need to pass __LINE__ explicitly for every call??? Other logging modules will get this information automatically via caller().
Levels are a bit confusing: why is debug split to 2 (or 3)?
Not as flexible as it should be because the design conflates some things together. For example, most levels output to STDERR but some level (VERBOSE) outputs to STDOUT instead. The output concern and levels should've been separated. Another example would be the DEBUGWAIT level, where level is DEBUG *and* execution is halted (wait on a keypress) on log. What if users want a lower level setting *but* want execution to be halted on log? The halt/keypress setting should've been separated from the level.