Package org.perf4j.logback

Provides the logback appenders that can be used to automatically aggregate and analyze StopWatch timing statements logged to an org.slf4j.Logger.

See:
          Description

Class Summary
AsyncCoalescingStatisticsAppender This logback Appender groups StopWatch log messages together to form GroupedTimingStatistics.
GraphingStatisticsAppender This appender is designed to be attached to an AsyncCoalescingStatisticsAppender.
JmxAttributeStatisticsAppender This appender is designed to be attached to an AsyncCoalescingStatisticsAppender.
StatisticsCsvLayout A layout that outputs GroupedTimingStatistics instances as comma-separated values.
 

Package org.perf4j.logback Description

Provides the logback appenders that can be used to automatically aggregate and analyze StopWatch timing statements logged to an org.slf4j.Logger. Normally, though, if logback is your logging framework of choice you should use the Slf4JStopWatch as your StopWatch implementation. Three appenders are provided:

  1. AsyncCoalescingStatisticsAppender - This appender is used to group logged StopWatch messages over a specified time span (defaults to 30 seconds) into single GroupedTimingStatistics messages. Other appenders are designed to be attached to this appender, and these downstream appenders are then only notified of this single GroupedTimingStatistics message at the specified interval. Note that this appender can be configured with a logback.xml file.
  2. JmxAttributeStatisticsAppender - This appender, when attached to an AsyncCoalescingStatisticsAppender described above, can be used to expose timing statistics (such as mean, min and max values) as attributes on a JMX MBean. Since there are many 3rd party tools designed to interact through JMX, this provides a way to allow monitoring and notification when application runtime performance degrades.
  3. GraphingStatisticsAppender - This appender is used to output graphs (as a URL to the graph object) backed by the logged GroupedTimingStatistics instances (thus, it is also designed to be attached to an AsyncCoalescingStatisticsAppender). In addition, these graphs can be made available through a web server using a GraphingServlet instance in concert with this class.
The following example shows how logging could be configured using a logback.xml file:
<configuration>
    <!-- Perf4J appenders -->
    <!--
       This AsyncCoalescingStatisticsAppender groups StopWatch log messages
       into GroupedTimingStatistics messages which it sends on the
       file appender defined below
    -->
    <appender name="CoalescingStatistics" class="org.perf4j.logback.AsyncCoalescingStatisticsAppender">
        <param name="TimeSlice" value="60000"/>
        <appender-ref ref="graphExecutionTimes"/>
        <appender-ref ref="graphExecutionTPS"/>
        <!-- We add the JMX Appender reference onto the CoalescingStatistics -->
        <appender-ref ref="perf4jJmxAppender"/>
    </appender>

    <appender name="graphExecutionTimes" class="org.perf4j.logback.GraphingStatisticsAppender">
        <!-- Possible GraphTypes are Mean, Min, Max, StdDev, Count and TPS -->
        <param name="GraphType" value="Mean"/>
        <!-- The tags of the timed execution blocks to graph are specified here -->
        <param name="TagNamesToGraph" value="DESTROY_TICKET_GRANTING_TICKET,GRANT_SERVICE_TICKET,GRANT_PROXY_GRANTING_TICKET,VALIDATE_SERVICE_TICKET,CREATE_TICKET_GRANTING_TICKET" />
    </appender>

    <appender name="graphExecutionTPS" class="org.perf4j.logback.GraphingStatisticsAppender">
        <param name="GraphType" value="TPS" />
        <param name="TagNamesToGraph" value="DESTROY_TICKET_GRANTING_TICKET,GRANT_SERVICE_TICKET,GRANT_PROXY_GRANTING_TICKET,VALIDATE_SERVICE_TICKET,CREATE_TICKET_GRANTING_TICKET" />
    </appender>

    <!--
      This JMX appender creates an MBean and publishes it to the platform MBean server by
      default.
    -->
    <appender name="perf4jJmxAppender" class="org.perf4j.logback.JmxAttributeStatisticsAppender">
        <!--
          You must specify the tag names whose statistics should be exposed as
          MBean attributes.
        -->
        <TagNamesToExpose>firstBlock,secondBlock</TagNamesToExpose>
        <!--
          The NotificationThresholds param configures the sending of JMX notifications
          when statistic values exceed specified thresholds. This config states that
          the firstBlock max value should be between 0 and 800ms, and the secondBlock max
          value should be less than 1500 ms. You can also set thresholds on the Min,
          Mean, StdDev, Count and TPS statistics - e.g. firstBlockMean(<600).
        -->
        <NotificationThresholds>firstBlockMax(0-800),secondBlockMax(<1500)</NotificationThresholds>
        <!--
          You can also specify an optional MBeanName param, which overrides
          the default MBean name of org.perf4j:type=StatisticsExposingMBean,name=Perf4J
        -->
    </appender>

    <!-- Loggers -->
    <!--
      The Perf4J logger. Note that org.perf4j.TimingLogger is the value of the
      org.perf4j.StopWatch.DEFAULT_LOGGER_NAME constant. Also, note that
      additivity is set to false, which is usually what is desired - this means
      that timing statements will only be sent to this logger and NOT to
      upstream loggers.
    -->
    <logger name="org.perf4j.TimingLogger" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="CoalescingStatistics"/>
        <appender-ref ref="perf4jFileAppender"/>
    </logger>

    <!-- This file appender is used to output aggregated performance statistics -->
    <appender name="perf4jFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>target/perf4j.log</File>
        <encoder>
            <Pattern>%date %-5level [%thread] %logger{36} [%file:%line] %msg%n</Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>target/perf4j.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
    </appender>
</configuration>
 

See Also:
logback


Copyright © 2008-2011 perf4j.org. All Rights Reserved.