package org.apache.commons.jcs.log;

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache license, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the license for the specific language governing permissions and
 * limitations under the license.
 */

/**
 * This is a SPI factory interface for specialized Log objects
 */
public interface LogFactory
{
    /**
     * The name of the root Log.
     */
    String ROOT_LOGGER_NAME = "";

    /**
     * Return the name of the Log subsystem managed by this factory
     *
     * @return the name of the log subsystem
     */
    String getName();

    /**
     * Shutdown the logging system if the logging system supports it.
     */
    void shutdown();

    /**
     * Returns a Log using the fully qualified name of the Class as the Log
     * name.
     *
     * @param clazz
     *            The Class whose name should be used as the Log name. If null
     *            it will default to the calling class.
     * @return The Log.
     * @throws UnsupportedOperationException
     *             if {@code clazz} is {@code null} and the calling class cannot
     *             be determined.
     */
    Log getLog(final Class<?> clazz);

    /**
     * Returns a Log with the specified name.
     *
     * @param name
     *            The logger name. If null the name of the calling class will be
     *            used.
     * @return The Log.
     * @throws UnsupportedOperationException
     *             if {@code name} is {@code null} and the calling class cannot
     *             be determined.
     */
    Log getLog(final String name);
}
