View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements. See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache license, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License. You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the license for the specific language governing permissions and
    15   * limitations under the license.
    16   */
    17  package org.apache.logging.log4j.core.jmx;
    18
    19  import javax.management.ObjectName;
    20
    21  import org.apache.logging.log4j.core.appender.AsyncAppender;
    22  import org.apache.logging.log4j.core.util.Assert;
    23
    24  /**
    25   * Implementation of the {@code AsyncAppenderAdminMBean} interface.
    26   */
    27  public class AsyncAppenderAdmin implements AsyncAppenderAdminMBean {
    28
    29      private final String contextName;
    30      private final AsyncAppender asyncAppender;
    31      private final ObjectName objectName;
    32
    33      /**
    34       * Constructs a new {@code AsyncAppenderAdmin} with the specified contextName
    35       * and async appender.
    36       *
    37       * @param contextName used in the {@code ObjectName} for this mbean
    38       * @param appender the instrumented object
    39       */
    40      public AsyncAppenderAdmin(final String contextName, final AsyncAppender appender) {
    41          // super(executor); // no notifications for now
    42          this.contextName = Assert.requireNonNull(contextName, "contextName");
    43          this.asyncAppender = Assert.requireNonNull(appender, "async appender");
    44          try {
    45              final String ctxName = Server.escape(this.contextName);
    46              final String configName = Server.escape(appender.getName());
    47              final String name = String.format(PATTERN, ctxName, configName);
    48              objectName = new ObjectName(name);
    49          } catch (final Exception e) {
    50              throw new IllegalStateException(e);
    51          }
    52      }
    53
    54      /**
    55       * Returns the {@code ObjectName} of this mbean.
    56       *
    57       * @return the {@code ObjectName}
    58       * @see AppenderAdminMBean#PATTERN
    59       */
    60      public ObjectName getObjectName() {
    61          return objectName;
    62      }
    63
    64      @Override
    65      public String getName() {
    66          return asyncAppender.getName();
    67      }
    68
    69      @Override
    70      public String getLayout() {
    71          return String.valueOf(asyncAppender.getLayout());
    72      }
    73
    74      @Override
    75      public boolean isIgnoreExceptions() {
    76          return asyncAppender.ignoreExceptions();
    77      }
    78
    79      @Override
    80      public String getErrorHandler() {
    81          return String.valueOf(asyncAppender.getHandler());
    82      }
    83
    84      @Override
    85      public String getFilter() {
    86          return String.valueOf(asyncAppender.getFilter());
    87      }
    88
    89      @Override
    90      public String[] getAppenderRefs() {
    91          return asyncAppender.getAppenderRefStrings();
    92      }
    93
    94      /**
    95       * Returns {@code true} if this AsyncAppender will take a snapshot of the stack with
    96       * every log event to determine the class and method where the logging call
    97       * was made.
    98       * @return {@code true} if location is included with every event, {@code false} otherwise
    99       */
    100     @Override
    101     public boolean isIncludeLocation() {
    102         return asyncAppender.isIncludeLocation();
    103     }
    104
    105     /**
    106      * Returns {@code true} if this AsyncAppender will block when the queue is full,
    107      * or {@code false} if events are dropped when the queue is full.
    108      * @return whether this AsyncAppender will block or drop events when the queue is full.
    109      */
    110     @Override
    111     public boolean isBlocking() {
    112         return asyncAppender.isBlocking();
    113     }
    114
    115     /**
    116      * Returns the name of the appender that any errors are logged to or {@code null}.
    117      * @return the name of the appender that any errors are logged to or {@code null}
    118      */
    119     @Override
    120     public String getErrorRef() {
    121         return asyncAppender.getErrorRef();
    122     }
    123
    124     @Override
    125     public int getQueueCapacity() {
    126         return asyncAppender.getQueueCapacity();
    127     }
    128
    129     @Override
    130     public int getQueueRemainingCapacity() {
    131         return asyncAppender.getQueueRemainingCapacity();
    132     }
    133 }