开发者

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜