/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
*/
/**
* Class for source-code tracing at the method level.
*
* One DebugTracer instance exists for each Java class using tracing.
* Tracer must be registered with the DebugLogger.
*
* Logging is always done at a level basis, with debug log messages
* exceeding the trace threshold being traced, others being discarded.
*/
public class DebugTracer
{
// The class this aspect traces.
/**
* A class that represents a settings cache entry.
*/
private class PublisherSettings
{
}
/**
* Construct a new DebugTracer object with cached settings obtained from
* the provided array of publishers.
*
* @param publishers The array of publishers to obtain the settings from.
*/
@SuppressWarnings("unchecked")
{
// Trim off the debug logging and non OpenDS frames.
// TODO: What if this is null or 0 length?
if(callerFrame != null)
{
// The caller should be the first item on the stack.
}
// Get the settings from all publishers.
{
// For some reason, the compiler doesn't see that
// debugLogPublihser.getMethodSettings returns a parameterized Map.
// This problem goes away if a parameterized verson of DebugLogPublisher
// is used. However, we can't not use reflection to instantiate a generic
// DebugLogPublisher<? extends DebugLogPublisherCfg> type. The only thing
// we can do is to just supress the compiler warnings.
publisherSettings[i] = settings;
}
}
/**
* Log an constructor execution event.
*
* @param level The level of the message being logged.
* @param args The arguments passed to the constructor.
*/
{
if(DebugLogger.debugEnabled())
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
if (activeSettings.noArgs)
{
}
{
}
}
}
}
}
/**
* Log an non static method entry event.
*
* @param level The level of the message being logged.
* @param obj The object type instance the method is a member of.
* @param args The arguments passed to the method.
*/
{
if(DebugLogger.debugEnabled())
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
if (activeSettings.noArgs)
{
}
{
}
}
}
}
}
/**
* Log an static method entry event.
*
* @param level The level of the message being logged.
* @param args The arguments passed to the method.
*/
{
if(DebugLogger.debugEnabled())
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
if (activeSettings.noArgs)
{
}
{
}
}
}
}
}
/**
* Log a return from a method call event.
*
* @param level The level of the message being logged.
* @param ret The value being returned from the method.
*/
{
if(DebugLogger.debugEnabled())
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
if (activeSettings.noRetVal)
{
}
{
}
}
}
}
}
/**
* Log an exception thrown from a method.
*
* @param level The level of the message being logged.
* @param ex The exception being thrown.
*/
{
if(DebugLogger.debugEnabled())
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
{
}
}
}
}
}
/**
* Log an arbitrary event at the verbose level.
* Same as debugMessage(DebugLogLevel.ERROR, msg)
*
* @param msg message to format and log.
*/
{
}
/**
* Log an arbitrary event at the verbose level.
* Same as debugMessage(DebugLogLevel.ERROR, msg, msgArgs...)
*
* @param msg message to format and log.
* @param msgArgs arguments to place into the format string.
*/
{
}
/**
* Log an arbitrary event at the info level.
* Same as debugMessage(DebugLogLevel.ERROR, msg)
*
* @param msg message to format and log.
*/
{
}
/**
* Log an arbitrary event at the info level.
* Same as debugMessage(DebugLogLevel.ERROR, msg, msgArgs...)
*
* @param msg message to format and log.
* @param msgArgs arguments to place into the format string.
*/
{
}
/**
* Log an arbitrary event at the warning level.
* Same as debugMessage(DebugLogLevel.ERROR, msg)
*
* @param msg message to format and log.
*/
{
}
/**
* Log an arbitrary event at the warning level.
* Same as debugMessage(DebugLogLevel.ERROR, msg, msgArgs...)
*
* @param msg message to format and log.
* @param msgArgs arguments to place into the format string.
*/
{
}
/**
* Log an arbitrary event at the error level.
* Same as debugMessage(DebugLogLevel.ERROR, msg)
*
* @param msg message to format and log.
*/
{
}
/**
* Log an arbitrary event at the error level.
* Same as debugMessage(DebugLogLevel.ERROR, msg, msgArgs...)
*
* @param msg message to format and log.
* @param msgArgs arguments to place into the format string.
*/
{
}
/**
* Log an arbitrary event.
*
* @param level the level of the log message.
* @param msg message to format and log.
*/
{
}
/**
* Log an arbitrary event.
*
* @param level the level of the log message.
* @param msg message to format and log.
* @param msgArgs arguments to place into the format string.
*/
{
if(DebugLogger.debugEnabled())
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
{
}
{
}
}
}
}
}
/**
* Log an cought exception.
*
* @param level the level of the log message.
* @param ex the exception caught.
*/
{
if(DebugLogger.debugEnabled())
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
{
}
}
}
}
}
/**
* Log a JE database access event.
*
* @param level the level of the log message.
* @param status status of the JE operation.
* @param database the database handle.
* @param txn transaction handle (may be null).
* @param key the key to dump.
* @param data the data to dump.
*/
{
if(DebugLogger.debugEnabled())
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
{
}
}
}
}
}
/**
* Log raw data in the form of a byte array.
*
* @param level the level of the log message.
* @param data the data to dump.
*/
{
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
{
}
}
}
}
}
/**
* Log a protocol element.
*
* @param level the level of the log message.
* @param elementStr the string representation of protocol element.
*/
{
{
{
{
if(stackTrace == null)
{
}
if (callerFrame == null)
{
}
// Specific method settings still could exist. Try getting
// the settings for this method.
if(methodSettings != null)
{
{
// Try looking for an undecorated method name
if (idx != -1)
{
}
}
// If this method does have a specific setting and it is not
// suppose to be logged, continue.
{
{
continue;
}
else
{
}
}
}
{
}
}
}
}
}
/**
* Log raw data in the form of a ByteBuffer.
*
* @param level the level of the log message.
* @param buffer the data to dump.
*/
{
}
/**
* Gets the name of the class this tracer traces.
*
* @return The name of the class this tracer traces.
*/
{
return className;
}
/**
* Update the cached settings of the tracer with the settings from the
* provided publishers.
*
* @param publishers The array of publishers to obtain the settings from.
*/
@SuppressWarnings("unchecked")
{
// Get the settings from all publishers.
{
// For some reason, the compiler doesn't see that
// debugLogPublihser.getMethodSettings returns a parameterized Map.
// This problem goes away if a parameterized verson of DebugLogPublisher
// is used. However, we can't not use reflection to instantiate a generic
// DebugLogPublisher<? extends DebugLogPublisherCfg> type. The only thing
// we can do is to just supress the compiler warnings.
newSettings[i] = settings;
}
}
/**
* Return the caller stack frame.
*
* @param stackTrace The entrie stack trace frames.
* @return the caller stack frame or null if none is found on the
* stack trace.
*/
{
{
// Skip leading frames debug logging classes and getStackTrace
// method call frame if any.
{
{
continue;
}
"org.opends.server.loggers.debug"))
{
return aStackTrace;
}
}
}
return null;
}
{
}
}