Chapter 15. Using Logging
Abstract
The broker's log contains information about all of the critical events that occur in the broker. You can configure the granularity of the logged messages to provide the required amount of detail.
Red Hat JBoss A-MQ uses the OPS4j Pax Logging system. Pax Logging is an open source OSGi logging service that extends the standard OSGi logging service to make it more appropriate for use in enterprise applications. It uses Apache Log4j as the back-end logging service. Pax Logging has its own API, but it also supports the following APIs:
- Apache Log4j
- Apache Commons Logging
- SLF4J
- Java Util Logging
15.1. Logging Configuration
Revision History | |
---|---|
09/12/2012 | |
clarified the configuration steps and updated the examples |
Abstract
To configure the logging of a broker, you need to edit the ops4j configuration and the broker's runtime configuration.
Overview
The logging system is configured by a combination of two OSGi Admin PIDs and one configuration file:
etc/system.properties
—the configuration file that sets the logging level during the broker’s boot process. The file contains a single property, org.ops4j.pax.logging.DefaultServiceLog.level, that is set toERROR
by default.org.ops4j.pax.logging
—the PID used to configure the logging back end service. It sets the logging levels for all of the defined loggers and defines the appenders used to generate log output. It uses standard Log4j configuration. By default, it sets the root logger's level toINFO
and defines two appenders: one for the console and one for the log file.NoteThe console's appender is disabled by default. To enable it, addlog4j.appender.stdout.append=true
to the configuration For example, to enable the console appender in a broker, you would use the following commands:JBossA-MQ:karaf@root>
config:edit org.ops4j.pax.logging
JBossA-MQ:karaf@root>
config:propappend log4j.appender.stdout.append true
JBossA-MQ:karaf@root>
config:update
org.apache.karaf.log.cfg
—configures the output of the log console commands.
The most common configuration changes you will make are changing the logging levels, changing the threshold for which an appender writes out log messages, and activating per bundle logging.
Changing the log levels
The default logging configuration sets the logging levels so that the log file will provide enough information to monitor the behavior of the runtime and provide clues about what caused a problem. However, the default configuration will not provide enough information to debug most problems.
The most useful logger to change when trying to debug an issue with Red Hat JBoss A-MQ is the root logger. You will want to set its logging level to generate more fine grained messages. To do so you change the value of the
org.ops4j.pax.logging
PID's log4j.rootLogger
property so that the logging level is one of the following:
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
NONE
Example 15.1, “Changing Logging Levels” shows the commands for setting the root loggers log level in a standalone broker.
Example 15.1. Changing Logging Levels
JBossA-MQ:karaf@root>
config:edit org.ops4j.pax.logging
JBossA-MQ:karaf@root>
config:propset log4j.rootLogger "DEBUG, out, osgi:VmLogAppender"
JBossA-MQ:karaf@root>
config:update
Changing the appenders' thresholds
When debugging a problem in JBoss A-MQ you may want to limit the amount of logging information that is displayed on the console, but not the amount written to the log file. This is controlled by setting the thresholds for each of the appenders to a different level. Each appender can have a
log4j.appender.appenderName.threshold
property that controls what level of messages are written to the appender. The appender threshold values are the same as the log level values.
Example 15.2, “Changing the Log Information Displayed on the Console” shows an example of setting the root logger to
DEBUG
but limiting the information displayed on the console to WARN
.
Example 15.2. Changing the Log Information Displayed on the Console
JBossA-MQ:karaf@root>
config:edit org.ops4j.pax.logging
JBossA-MQ:karaf@root>
config:propset log4j.rootLogger "DEBUG, out, osgi:VmLogAppender"
JBossA-MQ:karaf@root>
config:propappend log4j.appender.stdout.threshold WARN
JBossA-MQ:karaf@root>
config:update