java.util.logging: how to set level by logger package (or prefix)?
My app uses many libraries and I'm using java.util.logging
for logging. I'd like to be able to set different logging levels for each library by doing开发者_StackOverflow社区 something like:
org.datanucleus.*.level = WARNING
com.google.apphosting.*.level = WARNING
com.myapp.*.level = FINE
Is is possible?
You shouldn't use "*". A sample logging.properties could be such as:
handlers=java.util.logging.ConsoleHandler
.level=ALL
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
org.datanucleus.level=WARNING
org.datanucleus.handler=java.util.logging.ConsoleHandler
com.myapp.level=FINE
com.myapp.handler=java.util.logging.ConsoleHandler
And if all "org" level should be logged as WARNING then
org.level=WARNING
org.handler=java.util.logging.ConsoleHandler
I was able to get it working like this:
handlers= java.util.logging.ConsoleHandler
.level= INFO
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
com.myapp.level = ALL
com.myapp.handler=java.util.logging.ConsoleHandler
It would have been nice to control logging using only logging.properties
:
org = FINE
com = SEVERE
Unfortunately, the corresponding log must have actually been created. Changing your conf file won't do that work for you. Add the loggers yourself and it will work:
private static final Logger ORG_ROOT_LOGGER = Logger.getLogger("org");
private static final Logger COM_ROOT_LOGGER = Logger.getLogger("com");
Nested loggers in your application work the same way:
# perhaps in the main entry point for your application?
private static final Logger APP_ROOT_LOGGER = Logger.getLogger("com.myapp");
# in each package or class you want to have separately controlled loggers
private static final Logger LOG = Logger.getLogger(HelloWorldApp.class.getName());
# in logging.properties
com.myapp.level = FINE # sufficient to make all your loggers log as FINE
com.myapp.HelloWorldApp.level = SEVERE # turn off msgs from that particularly chatty app
精彩评论