/* * Conditions Of Use * * This software was developed by employees of the National Institute of * Standards and Technology (NIST), an agency of the Federal Government. * Pursuant to title 15 Untied States Code Section 105, works of NIST * employees are not subject to copyright protection in the United States * and are considered to be in the public domain. As a result, a formal * license is not needed to use the software. * * This software is provided by NIST as a service and is expressly * provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT * AND DATA ACCURACY. NIST does not warrant or make any representations * regarding the use of the software or the results thereof, including but * not limited to the correctness, accuracy, reliability or usefulness of * the software. * * Permission to use this software is contingent upon your acceptance * of the terms of this agreement. * */ /*************************************************************************** * Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * ***************************************************************************/ package gov.nist.core; import java.io.*; import java.util.Properties; // BEGIN ANDROID-added // TODO: this class should be replaced by android logging mechanism. public class LogWriter implements StackLogger { private static final String TAG = "SIP_STACK"; private boolean mEnabled = true; public void logStackTrace() { // TODO } public void logStackTrace(int traceLevel) { // TODO } public int getLineCount() { return 0; } public void logException(Throwable ex) { //Log.e(TAG, "", ex); } public void logDebug(String message) { //Log.d(TAG, message); } public void logTrace(String message) { //Log.d(TAG, message); } public void logFatalError(String message) { //Log.e(TAG, message); } public void logError(String message) { //Log.e(TAG, message); } public boolean isLoggingEnabled() { return mEnabled; } public boolean isLoggingEnabled(int logLevel) { // TODO return mEnabled; } public void logError(String message, Exception ex) { //Log.e(TAG, message, ex); } public void logWarning(String string) { //Log.w(TAG, string); } public void logInfo(String string) { //Log.i(TAG, string); } public void disableLogging() { mEnabled = false; } public void enableLogging() { mEnabled = true; } public void setBuildTimeStamp(String buildTimeStamp) { } public void setStackProperties(Properties stackProperties) { } public String getLoggerName() { return "Android SIP Logger"; } } // END android-added // BEGIN android-deleted //import org.apache.log4j.Appender; //import org.apache.log4j.FileAppender; //import org.apache.log4j.Level; //import org.apache.log4j.Logger; //import org.apache.log4j.Priority; //import org.apache.log4j.SimpleLayout; // ///** // * A wrapper around log4j that is used for logging debug and errors. You can // * replace this file if you want to change the way in which messages are logged. // * // * @version 1.2 // * // * @author M. Ranganathan <br/> // * @author M.Andrews // * @author Jeroen van Bemmel // * @author Jean Deruelle // * // */ // //public class LogWriter implements StackLogger { // // /** // * The logger to which we will write our logging output. // */ // private Logger logger; // // /** // * The stack name. // */ // private String stackName; // // /** // * Name of the log file in which the trace is written out (default is // * /tmp/sipserverlog.txt) // */ // private String logFileName = null; // // /** // * Flag to indicate that logging is enabled. // */ // private volatile boolean needsLogging = false; // // private int lineCount; // // /** // * trace level // */ // // protected int traceLevel = TRACE_NONE; // // private String buildTimeStamp; // // private Properties configurationProperties; // // /** // * log a stack trace. This helps to look at the stack frame. // */ // public void logStackTrace() { // this.logStackTrace(TRACE_DEBUG); // // } // // public void logStackTrace(int traceLevel) { // if (needsLogging) { // StringWriter sw = new StringWriter(); // PrintWriter pw = new PrintWriter(sw); // StackTraceElement[] ste = new Exception().getStackTrace(); // // Skip the log writer frame and log all the other stack frames. // for (int i = 1; i < ste.length; i++) { // String callFrame = "[" + ste[i].getFileName() + ":" // + ste[i].getLineNumber() + "]"; // pw.print(callFrame); // } // pw.close(); // String stackTrace = sw.getBuffer().toString(); // Level level = this.getLevel(traceLevel); // Priority priority = this.getLogPriority(); // if ( level.isGreaterOrEqual(priority)) { // logger.log(level,stackTrace); // } // // } // } // // /** // * Get the line count in the log stream. // * // * @return // */ // public int getLineCount() { // return lineCount; // } // // /** // * Get the logger. // * // * @return // */ // public Logger getLogger() { // return logger; // } // // // /** // * This method allows you to add an external appender. // * This is useful for the case when you want to log to // * a different log stream than a file. // * // * @param appender // */ // public void addAppender(Appender appender) { // // this.logger.addAppender(appender); // // } // // /** // * Log an exception. // * // * @param ex // */ // public void logException(Throwable ex) { // // if (needsLogging) { // // this.getLogger().error(ex.getMessage(), ex); // } // } // // // // // /** // * Counts the line number so that the debug log can be correlated to the // * message trace. // * // * @param message -- // * message to count the lines for. // */ // private void countLines(String message) { // char[] chars = message.toCharArray(); // for (int i = 0; i < chars.length; i++) { // if (chars[i] == '\n') // lineCount++; // } // // } // // /** // * Prepend the line and file where this message originated from // * // * @param message // * @return re-written message. // */ // private String enhanceMessage(String message) { // // StackTraceElement[] stackTrace = new Exception().getStackTrace(); // StackTraceElement elem = stackTrace[2]; // String className = elem.getClassName(); // String methodName = elem.getMethodName(); // String fileName = elem.getFileName(); // int lineNumber = elem.getLineNumber(); // String newMessage = className + "." + methodName + "(" + fileName + ":" // + lineNumber + ") [" + message + "]"; // return newMessage; // // } // // /** // * Log a message into the log file. // * // * @param message // * message to log into the log file. // */ // public void logDebug(String message) { // if (needsLogging) { // String newMessage = this.enhanceMessage(message); // if ( this.lineCount == 0) { // getLogger().debug("BUILD TIMESTAMP = " + this.buildTimeStamp); // getLogger().debug("Config Propeties = " + this.configurationProperties); // } // countLines(newMessage); // getLogger().debug(newMessage); // } // // } // // /** // * Log a message into the log file. // * // * @param message // * message to log into the log file. // */ // public void logTrace(String message) { // if (needsLogging) { // String newMessage = this.enhanceMessage(message); // if ( this.lineCount == 0) { // getLogger().debug("BUILD TIMESTAMP = " + this.buildTimeStamp); // getLogger().debug("Config Propeties = " + this.configurationProperties); // } // countLines(newMessage); // getLogger().trace(newMessage); // } // // } // // /** // * Set the trace level for the stack. // */ // private void setTraceLevel(int level) { // traceLevel = level; // } // // /** // * Get the trace level for the stack. // */ // public int getTraceLevel() { // return traceLevel; // } // // /** // * Log an error message. // * // * @param message -- // * error message to log. // */ // public void logFatalError(String message) { // Logger logger = this.getLogger(); // String newMsg = this.enhanceMessage(message); // countLines(newMsg); // logger.fatal(newMsg); // // } // // /** // * Log an error message. // * // * @param message -- // * error message to log. // * // */ // public void logError(String message) { // Logger logger = this.getLogger(); // String newMsg = this.enhanceMessage(message); // countLines(newMsg); // logger.error(newMsg); // // } // // public LogWriter() { // } // // public void setStackProperties(Properties configurationProperties) { // // this.configurationProperties = configurationProperties; // // String logLevel = configurationProperties // .getProperty("gov.nist.javax.sip.TRACE_LEVEL"); // // this.logFileName = configurationProperties // .getProperty("gov.nist.javax.sip.DEBUG_LOG"); // // this.stackName = configurationProperties // .getProperty("javax.sip.STACK_NAME"); // // //check whether a Log4j logger name has been // //specified. if not, use the stack name as the default // //logger name. // String category = configurationProperties // .getProperty("gov.nist.javax.sip.LOG4J_LOGGER_NAME", this.stackName); // // // logger = Logger.getLogger(category); // if (logLevel != null) { // if (logLevel.equals("LOG4J")) { // //if TRACE_LEVEL property is specified as // //"LOG4J" then, set the traceLevel based on // //the log4j effective log level. // Level level = logger.getEffectiveLevel(); // this.needsLogging = true; // if (level == Level.OFF) // this.needsLogging = false; // this.traceLevel = TRACE_NONE; // if (level.isGreaterOrEqual(Level.DEBUG)) { // this.traceLevel = TRACE_DEBUG; // } else if (level.isGreaterOrEqual(Level.INFO)) { // this.traceLevel = TRACE_INFO; // } else if (level.isGreaterOrEqual(Level.WARN)) { // this.traceLevel = TRACE_ERROR; // } // } // else { // try { // int ll = 0; // if (logLevel.equals("TRACE")) { // ll = TRACE_DEBUG; // Debug.debug = true; // Debug.setStackLogger(this); // } else if (logLevel.equals("DEBUG")) { // ll = TRACE_DEBUG; // } else if ( logLevel.equals("INFO")) { // ll = TRACE_INFO; // } else if (logLevel.equals("ERROR")) { // ll = TRACE_ERROR; // } else if (logLevel.equals("NONE") || logLevel.equals("OFF")) { // ll = TRACE_NONE; // } else { // ll = Integer.parseInt(logLevel); // if ( ll > 32 ) { // Debug.debug = true; // Debug.setStackLogger(this); // } // } // // this.setTraceLevel(ll); // this.needsLogging = true; // if (traceLevel == TRACE_DEBUG) { // logger.setLevel(Level.DEBUG); // } else if (traceLevel == TRACE_INFO) { // logger.setLevel(Level.INFO); // } else if (traceLevel == TRACE_ERROR) { // logger.setLevel(Level.ERROR); // } else if (traceLevel == TRACE_NONE) { // logger.setLevel(Level.OFF); // this.needsLogging = false; // } // // /* // * If user specifies a logging file as part of the startup // * properties then we try to create the appender. // */ // if (this.needsLogging && this.logFileName != null) { // // boolean overwrite = Boolean.valueOf( // configurationProperties.getProperty( // "gov.nist.javax.sip.DEBUG_LOG_OVERWRITE")); // // FileAppender fa = null; // try { // fa = new FileAppender(new SimpleLayout(), // this.logFileName, !overwrite); // } catch (FileNotFoundException fnf) { // // // Likely due to some directoy not existing. Create // // them // File logfile = new File(this.logFileName); // logfile.getParentFile().mkdirs(); // logfile.delete(); // // try { // fa = new FileAppender(new SimpleLayout(), // this.logFileName); // } catch (IOException ioe) { // ioe.printStackTrace(); // give up // } // } catch (IOException ex) { // ex.printStackTrace(); // } // // if (fa != null) // logger.addAppender(fa); // } // // } catch (NumberFormatException ex) { // ex.printStackTrace(); // System.err.println("LogWriter: Bad integer " + logLevel); // System.err.println("logging dislabled "); // needsLogging = false; // } // } // } else { // this.needsLogging = false; // // } // // // } // // /** // * @return flag to indicate if logging is enabled. // */ // public boolean isLoggingEnabled() { // // return this.needsLogging; // } // // /** // * Return true/false if loging is enabled at a given level. // * // * @param logLevel // */ // public boolean isLoggingEnabled(int logLevel) { // return this.needsLogging && logLevel <= traceLevel; // } // // // /** // * Log an error message. // * // * @param message // * @param ex // */ // public void logError(String message, Exception ex) { // Logger logger = this.getLogger(); // logger.error(message, ex); // // } // // /** // * Log a warning mesasge. // * // * @param string // */ // public void logWarning(String string) { // getLogger().warn(string); // // } // // /** // * Log an info message. // * // * @param string // */ // public void logInfo(String string) { // getLogger().info(string); // } // // /** // * Disable logging altogether. // * // */ // public void disableLogging() { // this.needsLogging = false; // } // // /** // * Enable logging (globally). // */ // public void enableLogging() { // this.needsLogging = true; // // } // // public void setBuildTimeStamp(String buildTimeStamp) { // this.buildTimeStamp = buildTimeStamp; // // } // // public Priority getLogPriority() { // if ( this.traceLevel == TRACE_INFO ) { // return Priority.INFO; // } else if ( this.traceLevel == TRACE_ERROR ) { // return Priority.ERROR; // } else if ( this.traceLevel == TRACE_DEBUG) { // return Priority.DEBUG; // } else if ( this.traceLevel == TRACE_TRACE) { // return Priority.DEBUG; // } else { // return Priority.FATAL; // } // } // // public Level getLevel(int traceLevel) { // if ( traceLevel == TRACE_INFO ) { // return Level.INFO; // } else if ( traceLevel == TRACE_ERROR ) { // return Level.ERROR; // } else if ( traceLevel == TRACE_DEBUG) { // return Level.DEBUG; // } else if (traceLevel == TRACE_TRACE) { // return Level.ALL; // } else { // return Level.OFF; // } // } // // public String getLoggerName() { // if ( this.logger != null ) { // return logger.getName(); // } else { // return null; // } // } // // //} // END android-deleted