001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache license, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the license for the specific language governing permissions and
015 * limitations under the license.
016 */
017package org.apache.logging.log4j.core.net;
018
019import org.apache.logging.log4j.util.EnglishEnums;
020
021/**
022 *  The facility codes used by the Syslog system.
023 *
024 *        Numerical          Facility<br>
025 *           Code<br>
026 *
027 *             0             kernel messages<br>
028 *             1             user-level messages<br>
029 *             2             mail system<br>
030 *             3             system daemons<br>
031 *             4             security/authorization messages<br>
032 *             5             messages generated internally by syslogd<br>
033 *             6             line printer subsystem<br>
034 *             7             network news subsystem<br>
035 *             8             UUCP subsystem<br>
036 *             9             clock daemon<br>
037 *            10             security/authorization messages<br>
038 *            11             FTP daemon<br>
039 *            12             NTP subsystem<br>
040 *            13             log audit<br>
041 *            14             log alert<br>
042 *            15             clock daemon (note 2)<br>
043 *            16             local use 0  (local0)<br>
044 *            17             local use 1  (local1)<br>
045 *            18             local use 2  (local2)<br>
046 *            19             local use 3  (local3)<br>
047 *            20             local use 4  (local4)<br>
048 *            21             local use 5  (local5)<br>
049 *            22             local use 6  (local6)<br>
050 *            23             local use 7  (local7)<br>
051 */
052public enum Facility {
053    /** Kernel messages. */
054    KERN(0),
055    /** User level messages. */
056    USER(1),
057    /** Mail system. */
058    MAIL(2),
059    /** System daemons. */
060    DAEMON(3),
061    /** Security/Authorization messages. */
062    AUTH(4),
063    /** Messages generated by syslogd. */
064    SYSLOG(5),
065    /** Line printer subsystem. */
066    LPR(6),
067    /** Network news subsystem. */
068    NEWS(7),
069    /** UUCP subsystem. */
070    UUCP(8),
071    /** Clock daemon. */
072    CRON(9),
073    /** Security/Authorization messages. */
074    AUTHPRIV(10),
075    /** FTP daemon. */
076    FTP(11),
077    /** NTP subsystem. */
078    NTP(12),
079    /** Log audit. */
080    LOG_AUDIT(13),
081    /** Log alert. */
082    LOG_ALERT(14),
083    /** Clock daemon. */
084    CLOCK(15),
085    /** Local use 0. */
086    LOCAL0(16),
087    /** Local use 1. */
088    LOCAL1(17),
089    /** Local use 2. */
090    LOCAL2(18),
091    /** Local use 3. */
092    LOCAL3(19),
093    /** Local use 4. */
094    LOCAL4(20),
095    /** Local use 5. */
096    LOCAL5(21),
097    /** Local use 6. */
098    LOCAL6(22),
099    /** Local use 7. */
100    LOCAL7(23);
101
102    private final int code;
103
104    private Facility(final int code) {
105        this.code = code;
106    }
107
108    /**
109     * Returns the Facility for the given string.
110     *
111     * @param name The Facility enum name, case-insensitive. If null, returns, null
112     * @return a Facility enum value or null if name is null
113     */
114    public static Facility toFacility(final String name) {
115        return toFacility(name, null);
116    }
117
118    /**
119     * Returns the Facility for the given string.
120     *
121     * @param name The Facility enum name, case-insensitive. If null, returns, defaultFacility
122     * @param defaultFacility the Facility to return if name is null
123     * @return a Facility enum value or null if name is null
124     */
125    public static Facility toFacility(final String name, final Facility defaultFacility) {
126        return EnglishEnums.valueOf(Facility.class, name, defaultFacility);
127    }
128
129    /**
130     * Retrieve the value of the enumeration.
131     * @return The value associated with the enumeration.
132     */
133    public int getCode() {
134        return this.code;
135    }
136
137    /**
138     * Determine if this enumeration matches the specified name (ignoring case).
139     * @param name The name to check.
140     * @return true if the name matches this enumeration, ignoring case.
141     */
142    public boolean isEqual(final String name) {
143        return this.name().equalsIgnoreCase(name);
144    }
145
146}