Unable to set log level in a Java web start application? -


some logging levels appear broke?

i run java web start (which begin call jws on) application straight glassfish 3.1.2.2 instance. client has static logger so:

private final static logger logger; static {     logger = logger.getlogger(app.class.getname());     // not sure how 1 externalize setting or if want to:     logger.setlevel(level.finer); } 

in main method, begin logic simple testing of logging feature:

alert("isloggable() info? " + logger.isloggable(level.info));     // prints true! alert("isloggable() fine? " + logger.isloggable(level.fine));     // ..true alert("isloggable() finer? " + logger.isloggable(level.finer));   // ..true alert("isloggable() finest? " + logger.isloggable(level.finest)); // ..false 

my alert methods display joptionpane dialog box "true gui logging". anyways, see printouts in comments added code snippet. expected, logger enabled levels info, fine , finer not finest.

after alert methods, type:

// info logger.info("level.info"); logger.log(level.info, "level.info");  // fine logger.fine("level.fine"); logger.log(level.fine, "level.fine");  // finer logger.finer("level.finer"); logger.log(level.finer, "level.finer"); logger.entering("", "level.finer", args); // <-- uses level.finer!  // finest logger.finest("level.finest"); logger.log(level.finest, "level.finest"); 

i go java console , click on tab "advanced", tick "enable logging". okay let's start application. guess happens? only level.info prints! here's proof (look @ bottom):

enter image description here

i've done best google log files on computer , see if not level.fine , level.finer end somewhere on file system. however, cannot find log messages anywhere.

summary of questions

  1. why appear logging of level.fine , level.finer not work in example provided?

  2. i set logging level in static initializing block, i'd sure externalize setting configuration file of sort, perhaps packaged ear file deploy on glassfish. or why not manually write in property in jnlp file download server. possible somehow?

solution problem no 1.

after doing little bit more reading on topic, concluded logger in java uses handler publish logs. , handler in turn has own set of "walls" levels handles. handler need not attached directly our logger! see loggers organized in hierarchical namespace , child logger may inherit parents handlers. if so, by default logger log output messages parent's handlers, , on recursively tree (see java logging overview - oracle).

i ain't saying full picture yet, , sure didn't find quotes how of relates java web start application. surely there has differences. anyways, did manage write static initializing block solves immediate problem:

static {     logger = logger.getlogger(app.class.getname());     /*      * logic can externalized. see next solution!      */     // deprecated: logger.setlevel(level.finer);     if (logger.getuseparenthandlers())         logger.getparent().gethandlers()[0].setlevel(level.finer);     else         logger.setlevel(level.finer); } 

solution problem no 2.

the logmanager api docs provided needed information following solution. in subdirectory of jre installation, there subdirectory called "lib" , in there shall find "logging.properties" file. full path file on windows machine:

c:\program files (x86)\java\jre7\lib\logging.properties

in here can change lot of flavors. 1 cool thing change global logging level. in file, done on row 29 (why see dot in front of "level"? root-parent of loggers called ""!). produce hole lot of output; on machine received 1 thousand log messages per second. changing global level isn't plausible enough considered option. instead, add new row specify level of logger. in case, added row:

martinandersson.com.malivechat.app.app.level = finer

however, chances still won't see results. in solution no 1, talked how loggers connected handlers. default handler specified in logging.properties, on row 18. here's how line reads:

handlers= java.util.logging.consolehandler

also previously, talked how these handlers in turn use levels should trouble mind. so, find line reads (should on row 44?):

java.util.logging.consolehandler.level = info

..and in case swapped "info" "finer". problem solved.

but!

my original inquiry matter still hasn't provided answer how 1 can set these properties closer in par application deployment. more specifically, attach these properties in separate file, bundled application ear file deploy on glassfish or that. have more information? please share!


Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -