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     */
017    package org.apache.logging.log4j.core.net;
018    
019    import org.apache.logging.log4j.Level;
020    
021    /**
022     *  Severity values used by the Syslog system.
023     *
024     * <table summary="Syslog Severity Values">
025     *     <tr>
026     *         <th>Numerical Code</th>
027     *         <th>Severity</th>
028     *     </tr>
029     *     <tr>
030     *         <td>0</td>
031     *         <td>Emergency: system is unusable</td>
032     *     </tr>
033     *     <tr>
034     *         <td>1</td>
035     *         <td>Alert: action must be taken immediately</td>
036     *     </tr>
037     *     <tr>
038     *         <td>2</td>
039     *         <td>Critical: critical conditions</td>
040     *     </tr>
041     *     <tr>
042     *         <td>3</td>
043     *         <td>Error: error conditions</td>
044     *     </tr>
045     *     <tr>
046     *         <td>4</td>
047     *         <td>Warning: warning conditions</td>
048     *     </tr>
049     *     <tr>
050     *         <td>5</td>
051     *         <td>Notice: normal but significant condition</td>
052     *     </tr>
053     *     <tr>
054     *         <td>6</td>
055     *         <td>Informational: informational messages</td>
056     *     </tr>
057     *     <tr>
058     *         <td>7</td>
059     *         <td>Debug: debug-level messages</td>
060     *     </tr>
061     * </table>
062     */
063    public enum Severity {
064        /** System is unusable. */
065        EMERG(0),
066        /** Action must be taken immediately. */
067        ALERT(1),
068        /** Critical conditions. */
069        CRITICAL(2),
070        /** Error conditions. */
071        ERROR(3),
072        /** Warning conditions. */
073        WARNING(4),
074        /** Normal but significant conditions. */
075        NOTICE(5),
076        /** Informational messages. */
077        INFO(6),
078        /** Debug level messages. */
079        DEBUG(7);
080    
081        private final int code;
082    
083        private Severity(final int code) {
084            this.code = code;
085        }
086    
087        /**
088         * Returns the severity code.
089         * @return The numeric value associated with the Severity.
090         */
091        public int getCode() {
092            return this.code;
093        }
094    
095        /**
096         * Determine if the name matches this Severity.
097         * @param name the name to match.
098         * @return true if the name matches, false otherwise.
099         */
100        public boolean isEqual(final String name) {
101            return this.name().equalsIgnoreCase(name);
102        }
103    
104        /**
105         * Returns the Severity for the specified Level.
106         * @param level The Level.
107         * @return The matching Severity, or DEBUG if there is no match.
108         */
109        public static Severity getSeverity(final Level level) {
110            switch (level.getStandardLevel()) {
111                case ALL:
112                    return DEBUG;
113                case TRACE:
114                    return DEBUG;
115                case DEBUG:
116                    return DEBUG;
117                case INFO:
118                    return INFO;
119                case WARN:
120                    return WARNING;
121                case ERROR:
122                    return ERROR;
123                case FATAL:
124                    return ALERT;
125                case OFF:
126                    return EMERG;
127            }
128            return DEBUG;
129        }
130    }