JBossBootLogging

JBoss Boot Logging

JBoss uses the Log4jService (in JBoss AS 5.x and earlier) or the LoggingService (in JBoss AS 6.x and later) to configure logging.

This service is not configured until after the bootstrap phase.

 

During the bootstrap the microkernel logs into log/boot.log using the configuration

from log4j.properties (in 5.x and earlier) or logging.properties (in 6.x and later) in $JBOSS_HOME/bin/run.jar.

 

Customizing Boot Logging

You can either change the configuration inside run.jar or use a system property to reference an outside configuration file.

Changing log4j.properties or logging.properties inside run.jar

The simplest strategy is to un-jar $JBOSS_HOME/bin/run.jar, change the appropriate properties file and re-jar. (the Open Source archiving software 7-zip does a good job at editing files inside of archives). For AS 5.x and earlier, two pre-configured alternate property files exist in run.jar for DEBUG and TRACE logging.  In 6.x and later, the system properties jboss.boot.server.log.level, jboss.boot.server.log.console.level, and jboss.boot.server.log.file.level may be used to override the log level setting.

Referencing an outside configuration

If you're looking for a less intrusive option, follow these steps:

  • extract log4j.properties or logging.properties from run.jar into, e.g. bin/log4j.properties or bin/logging.properties

  • edit run.bat (or .sh) and add:

set JAVA_OPTS=%JAVA_OPTS% -Dlog4j.configuration=file:%DIRNAME%log4j.properties

or for 6.x and later:

set JAVA_OPTS=%JAVA_OPTS% -Dlogging.configuration=file:%DIRNAME%logging.properties

During the bootstrap your log4j initialization file will be used in place of the one located in run.jar

 

You can also specify the boot log configuration at the command line, instead of editing run.bat/run.sh, for example:

   run.bat -Dlog4j.configuration=file:./log4j.properties

or for 6.x and later:

   run.bat -Dlogging.configuration=file:./logging.properties

or better, specify the full (URL) path to the file

   run.bat -Dlog4j.configuration=file:///C:/jboss/jboss-4.0.2/bin/log4j.properties

or for 6.x and later:

   run.bat -Dlogging.configuration=file:///C:/jboss/jboss-6.0.0/bin/logging.properties

Logging command line options in boot.log

Since AS 5.1.0.Beta1, command line parameters, including VM parameters, are shown in the boot.log. This has been achieved taking advantage of the following method available since JDK5: java.lang.management.RuntimeMXBean.getInputArguments(). See JBAS-5240 for further details. Example:

13:44:43,226 INFO [ServerInfo] VM arguments: -Dprogram.name=run.sh
-Xms128m -Xmx512m -XX:MaxPermSize=256m
-Dorg.jboss.resolver.warning=true
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.preferIPv4Stack=true
-Djava.endorsed.dirs=/home/galder/jboss/code/as/trunk/build/output/jboss-6.0.0.Alpha1/lib/endorsed

 

Logging configuration properties (6.x and up)

As of AS 6.0.0, the boot-time logging subsystem may be configured through the use of a logging.properties file.  The following properties may be specified:

 

  • Logger options
    • loggers=<category>[,<category>,...] - Specify a comma-separated list of logger categories which will be configured.  Any categories not listed here will not be configured from the following properties.
    • logger.<category>.level=<level> - Specify the level for a category.  The level can be a JDK logging level (SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST), a log4j-style level (FATAL, ERROR, WARN, INFO, DEBUG, TRACE), or a special level (OFF, ALL).  If unspecified, the nearest parent's level will be inherited.
    • logger.<category>.handlers=<handler>[,<handler>,...] - Specify a comma-separated list of the names of handlers to attach to this logger.  The handlers must be configured in the same properties file.
    • logger.<category>.filter=<filter> - Specify a filter for a category.  The filter must be configured in the same properties file.
    • logger.<category>.useParentHandlers=(true|false) - Specify whether log messages should cascade up to parent handlers.  The default value is true.
  • Handler options
    • handler.<name>=<className> - (Required) Specify the class name of the handler to instantiate.
    • handler.<name>.level=<level> - Restrict the level of this handler.  If unspecified, the default value of ALL is retained.
    • handler.<name>.encoding=<encoding> - Specify the character encoding, if it is supported by this handler type.  If not specified, a handler-specific default is used.
    • handler.<name>.errorManager=<name> - Specify the name of the error manager to use.  The error manager must be configured in the same properties file.  If unspecified, no error manager is configured.
    • handler.<name>.filter=<name> - Specify the name of the filter to use.  The filter must be configured in the same properties file.  If unspecified, messages are not filtered.
    • handler.<name>.formatter=<name> - Specify the name of the formatter to use, if it is supported by this handler type.  The formatter must be configured in the same properties file.  If not specified, messages will not be logged for most handler types.
    • handler.<name>.properties=<property>[,<property>,...] - Specify a list of JavaBean-style properties to additionally configure.  A rudimentary type introspection is done to ascertain the appropriate conversion for the given property.
    • handler.<name>.<property>=<value> - Set the value of the named property.
  • Error manager options
    • errorManager.<name>=<className> - (Required) Specify the class name of the error manager to instantiate.
    • errorManager.<name>.properties=<property>[,<property>,...] - Specify a list of JavaBean-style properties to additionally configure.  A rudimentary type introspection is done to ascertain the appropriate conversion for the given property.
    • errorManager.<name>.<property>=<value> - Set the value of the named property.
  • Formatter options
    • formatter.<name>=<className> - (Required) Specify the class name of the formatter to instantiate.
    • formatter.<name>.properties=<property>[,<property>,...] - Specify a list of JavaBean-style properties to additionally configure.  A rudimentary type introspection is done to ascertain the appropriate conversion for the given property.
    • formatter.<name>.<property>=<value> - Set the value of the named property.
  • Filter options
    • filter.<name>=<className> - (Required) Specify the class name of the filter to instantiate.
    • filter.<name>.properties=<property>[,<property>,...] - Specify a list of JavaBean-style properties to additionally configure.  A rudimentary type introspection is done to ascertain the appropriate conversion for the given property.
    • filter.<name>.<property>=<value> - Set the value of the named property.

Example configuration

This is an example logging.properties that you can use to get started.

 

# Additional logger names to configure (root logger is always configured)
#loggers=org.foo.bar, org.foo.baz

# Root logger level
logger.level=DEBUG

# Declare handlers for the root logger
logger.handlers=CONSOLE, FILE

# Declare handlers for additional loggers
#logger.org.foo.bar.handlers=XXX, YYY

# Console handler configuration
handler.CONSOLE=org.jboss.logmanager.handlers.ConsoleHandler
handler.CONSOLE.properties=autoFlush
handler.CONSOLE.level=INFO
handler.CONSOLE.autoFlush=true
handler.CONSOLE.formatter=PATTERN

# File handler configuration
handler.FILE=org.jboss.logmanager.handlers.FileHandler
handler.FILE.level=DEBUG
handler.FILE.properties=autoFlush,fileName
handler.FILE.autoFlush=true
handler.FILE.fileName=your/log/directory/server.log
handler.FILE.formatter=PATTERN

# The log format pattern for both logs
formatter.PATTERN=org.jboss.logmanager.formatters.PatternFormatter
formatter.PATTERN.properties=pattern
formatter.PATTERN.pattern=%d{HH:mm:ss,SSS} %-5p [%c{1}] %m%n