001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     *  or more contributor license agreements.  See the NOTICE file
004     *  distributed with this work for additional information
005     *  regarding copyright ownership.  The ASF licenses this file
006     *  to you under the Apache License, Version 2.0 (the
007     *  "License"); you may not use this file except in compliance
008     *  with the License.  You may obtain a copy of the License at
009     *
010     *       http://www.apache.org/licenses/LICENSE-2.0
011     *
012     *  Unless required by applicable law or agreed to in writing, software
013     *  distributed under the License is distributed on an "AS IS" BASIS,
014     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     *  See the License for the specific language governing permissions and
016     *  limitations under the License.
017     */
018    
019    package org.apache.hadoop.service;
020    
021    import org.apache.commons.logging.Log;
022    import org.apache.commons.logging.LogFactory;
023    import org.apache.hadoop.classification.InterfaceAudience.Public;
024    import org.apache.hadoop.classification.InterfaceStability.Evolving;
025    
026    /**
027     * This is a state change listener that logs events at INFO level
028     */
029    @Public
030    @Evolving
031    public class LoggingStateChangeListener implements ServiceStateChangeListener {
032    
033      private static final Log LOG = LogFactory.getLog(LoggingStateChangeListener.class);
034    
035      private final Log log;
036    
037      /**
038       * Log events to the given log
039       * @param log destination for events
040       */
041      public LoggingStateChangeListener(Log log) {
042        //force an NPE if a null log came in
043        log.isDebugEnabled();
044        this.log = log;
045      }
046    
047      /**
048       * Log events to the static log for this class
049       */
050      public LoggingStateChangeListener() {
051        this(LOG);
052      }
053    
054      /**
055       * Callback for a state change event: log it
056       * @param service the service that has changed.
057       */
058      @Override
059      public void stateChanged(Service service) {
060        log.info("Entry to state "  + service.getServiceState()
061                     + " for " + service.getName());
062      }
063    }