/*
 * 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.
 */

package org.apache.log4j.helpers;


/**
 * Constants used internally throughout log4j.
 */
public interface Constants {

    /**
     * log4j package name string literal.
     */
    String LOG4J_PACKAGE_NAME = "org.apache.log4j";

    /**
     * The name of the default repository is "default" (without the quotes).
     */
    String DEFAULT_REPOSITORY_NAME = "default";

    /**
     * application string literal.
     */
    String APPLICATION_KEY = "application";
    /**
     * hostname string literal.
     */
    String HOSTNAME_KEY = "hostname";
    /**
     * receiver string literal.
     */
    String RECEIVER_NAME_KEY = "receiver";
    /**
     * group string literal.
     */
    String GROUP_KEY = "group";
    /**
     * log4jid string literal.
     */
    String LOG4J_ID_KEY = "log4jid";
    /**
     * time stamp pattern string literal.
     */
    String TIMESTAMP_RULE_FORMAT = "yyyy/MM/dd HH:mm:ss";

    /**
     * The default property file name for automatic configuration.
     */
    String DEFAULT_CONFIGURATION_FILE = "log4j.properties";
    /**
     * The default XML configuration file name for automatic configuration.
     */
    String DEFAULT_XML_CONFIGURATION_FILE = "log4j.xml";
    /**
     * log4j.configuration string literal.
     */
    String DEFAULT_CONFIGURATION_KEY = "log4j.configuration";
    /**
     * log4j.configuratorClass string literal.
     */
    String CONFIGURATOR_CLASS_KEY = "log4j.configuratorClass";

    /**
     * JNDI context name string literal.
     */
    String JNDI_CONTEXT_NAME = "java:comp/env/log4j/context-name";

    /**
     * TEMP_LIST_APPENDER string literal.
     */
    String TEMP_LIST_APPENDER_NAME = "TEMP_LIST_APPENDER";
    /**
     * TEMP_CONSOLE_APPENDER string literal.
     */
    String TEMP_CONSOLE_APPENDER_NAME = "TEMP_CONSOLE_APPENDER";
    /**
     * Codes URL string literal.
     */
    String CODES_HREF =
        "http://logging.apache.org/log4j/docs/codes.html";


    /**
     * ABSOLUTE string literal.
     */
    String ABSOLUTE_FORMAT = "ABSOLUTE";
    /**
     * SimpleTimePattern for ABSOLUTE.
     */
    String ABSOLUTE_TIME_PATTERN = "HH:mm:ss,SSS";

    /**
     * SimpleTimePattern for ABSOLUTE.
     */
    String SIMPLE_TIME_PATTERN = "HH:mm:ss";

    /**
     * DATE string literal.
     */
    String DATE_AND_TIME_FORMAT = "DATE";
    /**
     * SimpleTimePattern for DATE.
     */
    String DATE_AND_TIME_PATTERN = "dd MMM yyyy HH:mm:ss,SSS";

    /**
     * ISO8601 string literal.
     */
    String ISO8601_FORMAT = "ISO8601";
    /**
     * SimpleTimePattern for ISO8601.
     */
    String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS";
}
