001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.midp.log;
028:
029: import com.sun.midp.configurator.Constants;
030:
031: /**
032: * The purpose of the logging service is to provide a standard means
033: * to report runtime information from within Java or native code.
034: * The porting process is eased by having to modify one logging
035: * service implementation in place of handling the ad hoc use of
036: * <code>println()</code>, <code>printf()</code>, <code>putc()</code>,
037: * and other functions currently used.
038: *
039: * An assert mechanism for Java code, implemented using the logging
040: * service is also provided here for convenience.
041: *
042: * This class consists of the Java interface to the functionality
043: * of the logging service.
044: */
045: public class LoggingBase {
046:
047: /**
048: * A default reporting severity level. This level is the lowest
049: * standard message reporting severity. It represents general
050: * reporting information and is typically not associated with any
051: * significant condition.
052: */
053: public static final int INFORMATION = Constants.LOG_INFORMATION;
054:
055: /**
056: * A reporting severity level. This level represents a warning
057: * severity, indicating an unexpected condition which is typically
058: * fully recoverable. Some action may be appropriate to correct
059: * the condition.
060: */
061: public static final int WARNING = Constants.LOG_WARNING;
062:
063: /**
064: * A reporting severity level. This level represents an error
065: * severity, indicating an unexpected condition which is typically
066: * at least partially recoverable. Some action is expected to correct
067: * the condition.
068: */
069: public static final int ERROR = Constants.LOG_ERROR;
070:
071: /**
072: * A reporting severity level. This level represents the most
073: * severe error occurrence, indicating an unexpected condition which
074: * is typically not recoverable or catastrophic to the system in some
075: * way. Some action is required to correct the condition.
076: */
077: public static final int CRITICAL = Constants.LOG_CRITICAL;
078:
079: /**
080: * A reporting severity level that should be used to disable all
081: * reporting output and allow all bytecodes relating to the
082: * report() method reporting to be compiled out of the build.
083: */
084: public static final int DISABLED = Constants.LOG_DISABLED;
085:
086: /**
087: * Current reporting severity level. When used as an argument to
088: * setReportLevel(), indicates that the current log level should
089: * not be changed.
090: */
091: public static final int CURRENT = Constants.LOG_CURRENT;
092:
093: /**
094: * Report a message to the Logging service. The message string should
095: * include enough description that someone reading the message will
096: * have enough context to diagnose and solve any problems if necessary.
097: * The severity level should be one of:
098: * <ul>
099: * <li>INFORMATION</li>
100: * <li>WARNING</li>
101: * <li>ERROR</li>
102: * <li>CRITICAL</li>
103: * </ul>
104: * and should properly reflect the severity of the message. The channel
105: * identifier should be one of the pre defined channels listed in
106: * the LogChannels.java file.
107: * <ul>
108: * </ul>
109: *
110: * A use example:
111: * <pre><code>
112: * if (Logging.REPORT_LEVEL <= severity) {
113: * Logging.report(Logging.<severity>,
114: * LogChannels.<channel>,
115: * "[meaningful message]");
116: * }
117: * </code></pre>
118: *
119: * No output will occur if <code>message</code> is null.
120: *
121: * @param severity severity level of report
122: * @param channelID area report relates to, from LogChannels.java
123: * @param message message to go with the report
124: */
125: public static native void report(int severity, int channelID,
126: String message);
127:
128: /**
129: * Obtain a stack trace from the Logging service, and report a message
130: * to go along with it. The message string should
131: * include enough description that someone reading the message will
132: * have enough context to diagnose and solve any problems if necessary.
133: * A use example:
134: * <code><pre>
135: * } catch (Throwable t) {
136: * if (Logging.TRACE_ENABLED) {
137: * Logging.trace(t, "[meaningful message]");
138: * }
139: * }
140: * </pre></code>
141: *
142: * This method does nothing if either <code>t</code>
143: * or <code>message</code> is null.
144: *
145: * @param t throwable causing this trace call
146: * @param message detail message for the trace log
147: */
148: public static void trace(Throwable t, String message) {
149:
150: if (t != null) {
151: System.out.println("TRACE: <at " + t.toString() + ">, "
152: + message);
153: t.printStackTrace();
154: }
155: }
156:
157: /**
158: * Report a message to the Logging service in the event that
159: * <code>condition</code> is false. The message string should
160: * include enough description that someone reading the message will
161: * have enough context to find the failed assertion.
162: *
163: * A use example:
164: * <pre><code>
165: * if (Logging.ASSERT_ENABLED){
166: * Logging.assertTrue([(boolean)conditional], "useful message");
167: * }
168: * </code></pre>
169: *
170: * This method reports nothing if <code>message</code> is null.
171: *
172: * @param condition asserted to be true by the caller.
173: * <code>message</code> is logged if false.
174: * @param message message to go with the report if the assert fails
175: * (when <code>condition</code> is false.
176: */
177: public static void assertTrue(boolean condition, String message) {
178: if (!condition) {
179: report(Logging.ERROR, LogChannels.LC_NONE,
180: "ASSERT FAILED: " + message);
181: }
182: }
183: }
|