/*
 * 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";
}
