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.log4j;
018    
019    /**
020     * <em style="color:#A44">Refrain from using this class directly, use
021     * the {@link Level} class instead.</em>
022     */
023    public class Priority {
024    
025        /**
026         * The <code>OFF</code> has the highest possible rank and is
027         * intended to turn off logging.
028         */
029        public static final int OFF_INT = Integer.MAX_VALUE;
030        /**
031         * The <code>FATAL</code> level designates very severe error
032         * events that will presumably lead the application to abort.
033         */
034        public static final int FATAL_INT = 50000;
035        /**
036         * The <code>ERROR</code> level designates error events that
037         * might still allow the application to continue running.
038         */
039        public static final int ERROR_INT = 40000;
040        /**
041         * The <code>WARN</code> level designates potentially harmful situations.
042         */
043        public static final int WARN_INT = 30000;
044        /**
045         * The <code>INFO</code> level designates informational messages
046         * that highlight the progress of the application at coarse-grained
047         * level.
048         */
049        public static final int INFO_INT = 20000;
050        /**
051         * The <code>DEBUG</code> Level designates fine-grained
052         * informational events that are most useful to debug an
053         * application.
054         */
055        public static final int DEBUG_INT = 10000;
056        //public final static int FINE_INT = DEBUG_INT;
057        /**
058         * The <code>ALL</code> has the lowest possible rank and is intended to
059         * turn on all logging.
060         */
061        public static final int ALL_INT = Integer.MIN_VALUE;
062    
063        /**
064         * @deprecated Use {@link Level#FATAL} instead.
065         */
066        @Deprecated
067        public static final Priority FATAL = new Level(FATAL_INT, "FATAL", 0);
068    
069        /**
070         * @deprecated Use {@link Level#ERROR} instead.
071         */
072        @Deprecated
073        public static final Priority ERROR = new Level(ERROR_INT, "ERROR", 3);
074    
075        /**
076         * @deprecated Use {@link Level#WARN} instead.
077         */
078        @Deprecated
079        public static final Priority WARN = new Level(WARN_INT, "WARN", 4);
080    
081        /**
082         * @deprecated Use {@link Level#INFO} instead.
083         */
084        @Deprecated
085        public static final Priority INFO = new Level(INFO_INT, "INFO", 6);
086    
087        /**
088         * @deprecated Use {@link Level#DEBUG} instead.
089         */
090        @Deprecated
091        public static final Priority DEBUG = new Level(DEBUG_INT, "DEBUG", 7);
092    
093        /*
094         * These variables should be private but were not in Log4j 1.2 so are left the same way here.
095         */
096        transient int level;
097        transient String levelStr;
098        transient int syslogEquivalent;
099    
100        /**
101         * Default constructor for deserialization.
102         */
103        protected Priority() {
104            level = DEBUG_INT;
105            levelStr = "DEBUG";
106            syslogEquivalent = 7;
107        }
108    
109        /**
110         * Instantiate a level object.
111         * @param level The level value.
112         * @param levelStr The level name.
113         * @param syslogEquivalent The equivalent syslog value.
114         */
115        protected Priority(final int level, final String levelStr, final int syslogEquivalent) {
116            this.level = level;
117            this.levelStr = levelStr;
118            this.syslogEquivalent = syslogEquivalent;
119        }
120    
121        /**
122         * Two priorities are equal if their level fields are equal.
123         * @param o The Object to check.
124         * @return true if the objects are equal, false otherwise.
125         *
126         * @since 1.2
127         */
128        @Override
129        public boolean equals(final Object o) {
130            if (o instanceof Priority) {
131                final Priority r = (Priority) o;
132                return this.level == r.level;
133            }
134            return false;
135        }
136    
137        @Override
138        public int hashCode() {
139            return this.level;
140        }
141    
142        /**
143         * Returns the syslog equivalent of this priority as an integer.
144         * @return The equivalent syslog value.
145         */
146        public
147        final int getSyslogEquivalent() {
148            return syslogEquivalent;
149        }
150    
151    
152        /**
153         * Returns {@code true} if this level has a higher or equal
154         * level than the level passed as argument, {@code false}
155         * otherwise.
156         * <p>
157         * You should think twice before overriding the default
158         * implementation of <code>isGreaterOrEqual</code> method.
159         * </p>
160         * @param r The Priority to check.
161         * @return true if the current level is greater or equal to the specified Priority.
162         */
163        public boolean isGreaterOrEqual(final Priority r) {
164            return level >= r.level;
165        }
166    
167        /**
168         * Returns all possible priorities as an array of Level objects in
169         * descending order.
170         * @return An array of all possible Priorities.
171         *
172         * @deprecated This method will be removed with no replacement.
173         */
174        @Deprecated
175        public static Priority[] getAllPossiblePriorities() {
176            return new Priority[]{Priority.FATAL, Priority.ERROR, Level.WARN,
177                Priority.INFO, Priority.DEBUG};
178        }
179    
180    
181        /**
182         * Returns the string representation of this priority.
183         * @return The name of the Priority.
184         */
185        @Override
186        public final String toString() {
187            return levelStr;
188        }
189    
190        /**
191         * Returns the integer representation of this level.
192         * @return The integer value of this level.
193         */
194        public final int toInt() {
195            return level;
196        }
197    
198        /**
199         * @param sArg The name of the Priority.
200         * @return The Priority matching the name.
201         * @deprecated Please use the {@link Level#toLevel(String)} method instead.
202         */
203        @Deprecated
204        public static Priority toPriority(final String sArg) {
205            return Level.toLevel(sArg);
206        }
207    
208        /**
209         * @param val The value of the Priority.
210         * @return The Priority matching the value.
211         * @deprecated Please use the {@link Level#toLevel(int)} method instead.
212         */
213        @Deprecated
214        public static Priority toPriority(final int val) {
215            return toPriority(val, Priority.DEBUG);
216        }
217    
218        /**
219         * @param val The value of the Priority.
220         * @param defaultPriority The default Priority to use if the value is invalid.
221         * @return The Priority matching the value or the default Priority if no match is found.
222         * @deprecated Please use the {@link Level#toLevel(int, Level)} method instead.
223         */
224        @Deprecated
225        public static Priority toPriority(final int val, final Priority defaultPriority) {
226            return Level.toLevel(val, (Level) defaultPriority);
227        }
228    
229        /**
230         * @param sArg The name of the Priority.
231         * @param defaultPriority The default Priority to use if the name is not found.
232         * @return The Priority matching the name or the default Priority if no match is found.
233         * @deprecated Please use the {@link Level#toLevel(String, Level)} method instead.
234         */
235        @Deprecated
236        public static Priority toPriority(final String sArg, final Priority defaultPriority) {
237            return Level.toLevel(sArg, (Level) defaultPriority);
238        }
239    }