Please edit you're post to have code tags. see How to use the forum.
Next, why make nice classes but still mess with macro's? I'm against macro's for most stuff (because C++ has better solutions for it) but for making switchable/flexible debugging it's quite good. I once made a proff-of-concept library for it DebugLib.
Your debuglib is using Serial, but I don't want to be depended on Serial, it can also be SerialUSB or something like that.
I want to have the option to initialize it in the sketch.
@septillion : it seems very interesting, can you please explain how to use your lib? Please give a few examples for people who (like me) don't understand the code...
Thanks
You can indeed make it fixed. Don't even need a class for that even. But than there is no excuse to use macro's! The beauty of the macro trick is completely disappears from the code one disabled. And it's weird to switch debug device on the fly : If you're debugging you know where you're debugging in...
But yeah, you could make a function (which you can wrap in a library). The most flexible way if you always debug to Print-classes would be to have a pointer to that print class which you can set. Or wrap it in a class.
But really, I see no use in run time switching debug device....