Class LoggingMetricPublisher

java.lang.Object
software.amazon.awssdk.metrics.LoggingMetricPublisher
All Implemented Interfaces:
AutoCloseable, MetricPublisher, SdkAutoCloseable

public final class LoggingMetricPublisher extends Object implements MetricPublisher
An implementation of MetricPublisher that logs all published metrics under the software.amazon.awssdk.metrics.LoggingMetricPublisher namespace.

LoggingMetricPublisher can be configured with a Level to control the log level at which metrics are recorded and a LoggingMetricPublisher.Format to control the format that metrics are printed in.

LoggingMetricPublisher.Format.PLAIN can be used to print all metrics on a single line. E.g.,

 Metrics published: MetricCollection(name=ApiCall, metrics=[MetricRecord(metric=MarshallingDuration, value=PT0.000202197S),
 MetricRecord(metric=RetryCount, value=0), MetricRecord(metric=ApiCallSuccessful, value=true),
 MetricRecord(metric=OperationName, value=HeadObject), MetricRecord(metric=ApiCallDuration, value=PT0.468369S),
 MetricRecord(metric=CredentialsFetchDuration, value=PT0.000003191S), MetricRecord(metric=ServiceId, value=S3)],
 children=[MetricCollection(name=ApiCallAttempt, metrics=[MetricRecord(metric=SigningDuration, value=PT0.000667268S),
 MetricRecord(metric=ServiceCallDuration, value=PT0.460529977S), MetricRecord(metric=AwsExtendedRequestId,
 value=jY/Co5Ge6WjRYk78kGOYQ4Z/CqUBr6pAAPZtexgOQR3Iqs3QP0OfZz3fDraQiXtmx7eXCZ4sbO0=), MetricRecord(metric=HttpStatusCode,
 value=200), MetricRecord(metric=BackoffDelayDuration, value=PT0S), MetricRecord(metric=AwsRequestId, value=6SJ82R65SADHX098)],
 children=[MetricCollection(name=HttpClient, metrics=[MetricRecord(metric=AvailableConcurrency, value=0),
 MetricRecord(metric=LeasedConcurrency, value=0), MetricRecord(metric=ConcurrencyAcquireDuration, value=PT0.230757S),
 MetricRecord(metric=PendingConcurrencyAcquires, value=0), MetricRecord(metric=MaxConcurrency, value=50),
 MetricRecord(metric=HttpClientName, value=NettyNio)], children=[])])])
 
LoggingMetricPublisher.Format.PRETTY can be used to print metrics over multiple lines in a readable fashion suitable for debugging. E.g.,
 [18e5092e] ApiCall
 [18e5092e] ┌────────────────────────────────────────┐
 [18e5092e] │ MarshallingDuration=PT0.000227427S     │
 [18e5092e] │ RetryCount=0                           │
 [18e5092e] │ ApiCallSuccessful=true                 │
 [18e5092e] │ OperationName=HeadObject               │
 [18e5092e] │ ApiCallDuration=PT0.541751S            │
 [18e5092e] │ CredentialsFetchDuration=PT0.00000306S │
 [18e5092e] │ ServiceId=S3                           │
 [18e5092e] └────────────────────────────────────────┘
 [18e5092e]     ApiCallAttempt
 [18e5092e]     ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐
 [18e5092e]     │ SigningDuration=PT0.000974924S                                                                    │
 [18e5092e]     │ ServiceCallDuration=PT0.531462375S                                                                │
 [18e5092e]     │ AwsExtendedRequestId=eGfwjV3mSwQZQD4YxHLswYguvhQoGcDTkr2jRvpio37a6QmhWd18C8wagC8LkBzzcnOOKoMuiXw= │
 [18e5092e]     │ HttpStatusCode=200                                                                                │
 [18e5092e]     │ BackoffDelayDuration=PT0S                                                                         │
 [18e5092e]     │ AwsRequestId=ED46TP7NN62DDG4Q                                                                     │
 [18e5092e]     └───────────────────────────────────────────────────────────────────────────────────────────────────┘
 [18e5092e]         HttpClient
 [18e5092e]         ┌────────────────────────────────────────┐
 [18e5092e]         │ AvailableConcurrency=0                 │
 [18e5092e]         │ LeasedConcurrency=0                    │
 [18e5092e]         │ ConcurrencyAcquireDuration=PT0.235851S │
 [18e5092e]         │ PendingConcurrencyAcquires=0           │
 [18e5092e]         │ MaxConcurrency=50                      │
 [18e5092e]         │ HttpClientName=NettyNio                │
 [18e5092e]         └────────────────────────────────────────┘
 
Note that the output format may be subject to small changes in future versions and should not be relied upon as a strict public contract.
  • Method Details

    • create

      public static LoggingMetricPublisher create()
      Create a LoggingMetricPublisher with the default configuration of Level.INFO and LoggingMetricPublisher.Format.PLAIN.
    • create

      public static LoggingMetricPublisher create(org.slf4j.event.Level logLevel, LoggingMetricPublisher.Format format)
      Create a LoggingMetricPublisher with a custom LoggingMetricPublisher.Format and log Level.
      Parameters:
      logLevel - the SLF4J log level to log metrics with
      format - the format to print the metrics with (see class-level documentation for examples)
    • publish

      public void publish(MetricCollection metrics)
      Description copied from interface: MetricPublisher
      Notify the publisher of new metric data. After this call returns, the caller can safely discard the given metricCollection instance if it no longer needs it. Implementations are strongly encouraged to complete any further aggregation and publishing of metrics in an asynchronous manner to avoid blocking the calling thread.

      With the exception of a null metricCollection, all invocations of this method must return normally. This is to ensure that callers of the publisher can safely assume that even in situations where an error happens during publishing that it will not interrupt the calling thread.

      Specified by:
      publish in interface MetricPublisher
      Parameters:
      metrics - The collection of metrics.
    • close

      public void close()
      Description copied from interface: MetricPublisher

      Important: Implementations must block the calling thread until all pending metrics are published and any resources acquired have been freed.

      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface MetricPublisher
      Specified by:
      close in interface SdkAutoCloseable