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.log4j;
018
019/**
020 * <em style="color:#A44">Refrain from using this class directly, use
021 * the {@link Level} class instead.</em>
022 */
023public 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}