Project log4j Debugging on --verbose: Difference between revisions
(→API) |
(→API) |
||
Line 35: | Line 35: | ||
If you want to enable logging manually in the program, use: | If you want to enable logging manually in the program, use: | ||
< | <syntaxhighlight lang='java'> | ||
import io.novaordis.utilities.logging.StderrVerboseLogging; | import io.novaordis.utilities.logging.StderrVerboseLogging; | ||
Line 43: | Line 43: | ||
} | } | ||
... | ... | ||
</ | </syntaxhighlight> | ||
=Shell Wrapper Recommendations= | =Shell Wrapper Recommendations= |
Revision as of 16:08, 23 July 2017
Internal
Overview
This is a pattern that consists in routing all log4j logging information to stderr if -v or --verbose command line options are used. Projects that implement it are clad, gld, etc.
This pattern only applies to command line utilities, which are supposed to run in foreground and send their logging at stdout or stderr. For processes that run in background, use
log4j debugging on --verbose and alternative log4j configuration can be combined, where --verbose flag applies until the configuration file is parsed and the new logging configuration is installed.
API
Use novaordis-utilities 4.2 or newer. novaordis-utilities 4.2.0 was the first release that contains StderrVerboseLogging.
For more details, see:
StderrVerboseLogging comes with an init() static utility method that looks at the "verbose" system property and turns on stderr logging. The recommended usage pattern is:
import io.novaordis.utilities.logging.StderrVerboseLogging;
StderrVerboseLogging.init();
You should call StderrVerboseLogging.init() as early as possible after the JVM starts running. For suggestion on how to pass the logging verbosity option from the shell wrapper to the JVM, see Shell Wrapper Recommendations below.
If you want to enable logging manually in the program, use:
import io.novaordis.utilities.logging.StderrVerboseLogging;
...
if (verbose) {
StderrVerboseLogging.enable();
}
...
Shell Wrapper Recommendations
The recommended way to pass the "verbose" information that was already identified by a bash wrapper to the JVM is to use:
-Dverbose=true
Typical bash wrapper code:
verbose=false ... ${verbose} && verbose_system_property="-Dverbose=true" command="${java_bin} ... ${verbose_system_property} ${main_class}..."
application-shell-wrapper-template of bash-wrapper-functions implements this pattern.