I want to do something which seems really straightforward: just pass a lot of logging commands (maybe all, but particularly WARN
and ERROR
levels) through a method in a simple utility class. I want to do this in particular so that during testing I can suppress the actual output to logging by mocking the method which does this call.
But I can't find out how, with ch.qos.logback.classic.Logger
, to call a single method with the Level
as a parameter ... obviously I could use a switch
command based on this value, but in some logging frameworks there's a method or two which lets you pass the logging Level
as a parameter. Seems a bit "primitive" not to provide this.
The method might look a bit like this:
Logger.log( Level level, String msg )
Later
Having now looked up the "XY problem" I understand the scepticism about this question. Dynamic logging is considered bad, at least in Java (possibly less so in Python)... now I know and understand that the preferred route is to configure the logging configuration appropriately for testing.
One minor point, though, if I may: although I haven't implemented this yet with this particular project, I generally find "just" tracing the stacktrace back to the beginning of the particular Thread
insufficient, and this is what logback does (with Exceptions
passed at WARN
or ERROR
levels). I plan to implement a system for recording "snapshots" of Threads
when they run new Threads
... which can then be listed (right back to the start of the app's first Thread
) if an error occurs. This is, if you like, another justification for using something to "handle" outgoing log calls. I suppose that if I want to implement something like this I will instead have to try to extend some elements of logback in some way.