/*
*
*
* Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
package com.sun.midp.log;
import com.sun.midp.configurator.Constants;
/**
* The purpose of the logging service is to provide a standard means
* to report runtime information from within Java or native code.
* The porting process is eased by having to modify one logging
* service implementation in place of handling the ad hoc use of
* <code>println()</code>, <code>printf()</code>, <code>putc()</code>,
* and other functions currently used.
*
* An assert mechanism for Java code, implemented using the logging
* service is also provided here for convenience.
*
* This class consists of the Java interface to the functionality
* of the logging service.
*/
public class LoggingBase {
/**
* A default reporting severity level. This level is the lowest
* standard message reporting severity. It represents general
* reporting information and is typically not associated with any
* significant condition.
*/
public static final int INFORMATION = Constants.LOG_INFORMATION;
/**
* A reporting severity level. This level represents a warning
* severity, indicating an unexpected condition which is typically
* fully recoverable. Some action may be appropriate to correct
* the condition.
*/
public static final int WARNING = Constants.LOG_WARNING;
/**
* A reporting severity level. This level represents an error
* severity, indicating an unexpected condition which is typically
* at least partially recoverable. Some action is expected to correct
* the condition.
*/
public static final int ERROR = Constants.LOG_ERROR;
/**
* A reporting severity level. This level represents the most
* severe error occurrence, indicating an unexpected condition which
* is typically not recoverable or catastrophic to the system in some
* way. Some action is required to correct the condition.
*/
public static final int CRITICAL = Constants.LOG_CRITICAL;
/**
* A reporting severity level that should be used to disable all
* reporting output and allow all bytecodes relating to the
* report() method reporting to be compiled out of the build.
*/
public static final int DISABLED = Constants.LOG_DISABLED;
/**
* Current reporting severity level. When used as an argument to
* setReportLevel(), indicates that the current log level should
* not be changed.
*/
public static final int CURRENT = Constants.LOG_CURRENT;
/**
* Report a message to the Logging service. The message string should
* include enough description that someone reading the message will
* have enough context to diagnose and solve any problems if necessary.
* The severity level should be one of:
* <ul>
* <li>INFORMATION</li>
* <li>WARNING</li>
* <li>ERROR</li>
* <li>CRITICAL</li>
* </ul>
* and should properly reflect the severity of the message. The channel
* identifier should be one of the pre defined channels listed in
* the LogChannels.java file.
* <ul>
* </ul>
*
* A use example:
* <pre><code>
* if (Logging.REPORT_LEVEL <= severity) {
* Logging.report(Logging.<severity>,
* LogChannels.<channel>,
* "[meaningful message]");
* }
* </code></pre>
*
* No output will occur if <code>message</code> is null.
*
* @param severity severity level of report
* @param channelID area report relates to, from LogChannels.java
* @param message message to go with the report
*/
public static native void report(int severity, int channelID,
String message);
/**
* Obtain a stack trace from the Logging service, and report a message
* to go along with it. The message string should
* include enough description that someone reading the message will
* have enough context to diagnose and solve any problems if necessary.
* A use example:
* <code><pre>
* } catch (Throwable t) {
* if (Logging.TRACE_ENABLED) {
* Logging.trace(t, "[meaningful message]");
* }
* }
* </pre></code>
*
* This method does nothing if either <code>t</code>
* or <code>message</code> is null.
*
* @param t throwable causing this trace call
* @param message detail message for the trace log
*/
public static void trace(Throwable t, String message) {
if (t != null) {
System.out.println("TRACE: <at " + t.toString() + ">, " + message);
t.printStackTrace();
}
}
/**
* Report a message to the Logging service in the event that
* <code>condition</code> is false. The message string should
* include enough description that someone reading the message will
* have enough context to find the failed assertion.
*
* A use example:
* <pre><code>
* if (Logging.ASSERT_ENABLED){
* Logging.assertTrue([(boolean)conditional], "useful message");
* }
* </code></pre>
*
* This method reports nothing if <code>message</code> is null.
*
* @param condition asserted to be true by the caller.
* <code>message</code> is logged if false.
* @param message message to go with the report if the assert fails
* (when <code>condition</code> is false.
*/
public static void assertTrue(boolean condition, String message) {
if (!condition) {
report(Logging.ERROR, LogChannels.LC_NONE, "ASSERT FAILED: "
+ message);
}
}
}
|