This is overall, quite a lot. I suggest one-thing-at-a-time,
starting with kprint_<level>() that is compiled out if desired
and no fancy block or newline stuff.
_Then_, will see how it flies. All of this smells like a bit of
overdesigning, aka http://en.wikipedia.org/wiki/YAGNI
-