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 * <table>
025 *     <tr>
026 *         <th>Numerical Code</th>
027 *         <th>Facility</th>
028 *     </tr>
029 *     <tr>
030 *         <td>0</td>
031 *         <td>kernel messages</td>
032 *     </tr>
033 *     <tr>
034 *         <td>1</td>
035 *         <td>user-level messages</td>
036 *     </tr>
037 *     <tr>
038 *         <td>2</td>
039 *         <td>mail system</td>
040 *     </tr>
041 *     <tr>
042 *         <td>3</td>
043 *         <td>system daemons</td>
044 *     </tr>
045 *     <tr>
046 *         <td>4</td>
047 *         <td>security/authorization messages</td>
048 *     </tr>
049 *     <tr>
050 *         <td>5</td>
051 *         <td>messages generated internally by syslogd</td>
052 *     </tr>
053 *     <tr>
054 *         <td>6</td>
055 *         <td>line printer subsystem</td>
056 *     </tr>
057 *     <tr>
058 *         <td>7</td>
059 *         <td>network news subsystem</td>
060 *     </tr>
061 *     <tr>
062 *         <td>8</td>
063 *         <td>UUCP subsystem</td>
064 *     </tr>
065 *     <tr>
066 *         <td>9</td>
067 *         <td>clock daemon</td>
068 *     </tr>
069 *     <tr>
070 *         <td>10</td>
071 *         <td>security/authorization messages</td>
072 *     </tr>
073 *     <tr>
074 *         <td>11</td>
075 *         <td>FTP daemon</td>
076 *     </tr>
077 *     <tr>
078 *         <td>12</td>
079 *         <td>NTP subsystem</td>
080 *     </tr>
081 *     <tr>
082 *         <td>13</td>
083 *         <td>log audit</td>
084 *     </tr>
085 *     <tr>
086 *         <td>14</td>
087 *         <td>log alert</td>
088 *     </tr>
089 *     <tr>
090 *         <td>15</td>
091 *         <td>clock daemon (note 2)</td>
092 *     </tr>
093 *     <tr>
094 *         <td>16</td>
095 *         <td>local use 0 (local0)</td>
096 *     </tr>
097 *     <tr>
098 *         <td>17</td>
099 *         <td>local use 1 (local1)</td>
100 *     </tr>
101 *     <tr>
102 *         <td>18</td>
103 *         <td>local use 2 (local2)</td>
104 *     </tr>
105 *     <tr>
106 *         <td>19</td>
107 *         <td>local use 3 (local3)</td>
108 *     </tr>
109 *     <tr>
110 *         <td>20</td>
111 *         <td>local use 4 (local4)</td>
112 *     </tr>
113 *     <tr>
114 *         <td>21</td>
115 *         <td>local use 5 (local5)</td>
116 *     </tr>
117 *     <tr>
118 *         <td>22</td>
119 *         <td>local use 6 (local6)</td>
120 *     </tr>
121 *     <tr>
122 *         <td>23</td>
123 *         <td>local use 7 (local7)</td>
124 *     </tr>
125 * </table>
126 */
127public enum Facility {
128
129    /** Kernel messages. */
130    KERN(0),
131
132    /** User level messages. */
133    USER(1),
134
135    /** Mail system. */
136    MAIL(2),
137
138    /** System daemons. */
139    DAEMON(3),
140
141    /** Security/Authorization messages. */
142    AUTH(4),
143
144    /** Messages generated by syslogd. */
145    SYSLOG(5),
146
147    /** Line printer subsystem. */
148    LPR(6),
149
150    /** Network news subsystem. */
151    NEWS(7),
152
153    /** UUCP subsystem. */
154    UUCP(8),
155
156    /** Clock daemon. */
157    CRON(9),
158
159    /** Security/Authorization messages. */
160    AUTHPRIV(10),
161
162    /** FTP daemon. */
163    FTP(11),
164
165    /** NTP subsystem. */
166    NTP(12),
167
168    /** Log audit. */
169    LOG_AUDIT(13),
170
171    /** Log alert. */
172    LOG_ALERT(14),
173
174    /** Clock daemon. */
175    CLOCK(15),
176
177    /** Local use 0. */
178    LOCAL0(16),
179
180    /** Local use 1. */
181    LOCAL1(17),
182
183    /** Local use 2. */
184    LOCAL2(18),
185
186    /** Local use 3. */
187    LOCAL3(19),
188
189    /** Local use 4. */
190    LOCAL4(20),
191
192    /** Local use 5. */
193    LOCAL5(21),
194
195    /** Local use 6. */
196    LOCAL6(22),
197
198    /** Local use 7. */
199    LOCAL7(23);
200
201    private final int code;
202
203    Facility(final int code) {
204        this.code = code;
205    }
206
207    /**
208     * Returns the Facility for the given string.
209     *
210     * @param name The Facility enum name, case-insensitive. If null, returns, null
211     * @return a Facility enum value or null if name is null
212     */
213    public static Facility toFacility(final String name) {
214        return toFacility(name, null);
215    }
216
217    /**
218     * Returns the Facility for the given string.
219     *
220     * @param name The Facility enum name, case-insensitive. If null, returns, defaultFacility
221     * @param defaultFacility the Facility to return if name is null
222     * @return a Facility enum value or null if name is null
223     */
224    public static Facility toFacility(final String name, final Facility defaultFacility) {
225        return EnglishEnums.valueOf(Facility.class, name, defaultFacility);
226    }
227
228    /**
229     * Retrieve the value of the enumeration.
230     * @return The value associated with the enumeration.
231     */
232    public int getCode() {
233        return this.code;
234    }
235
236    /**
237     * Determine if this enumeration matches the specified name (ignoring case).
238     * @param name The name to check.
239     * @return true if the name matches this enumeration, ignoring case.
240     */
241    public boolean isEqual(final String name) {
242        return this.name().equalsIgnoreCase(name);
243    }
244
245}