Package cx.ath.matthew.debug

# Class Debug

java.lang.Object
cx.ath.matthew.debug.Debug

public class Debug extends Object
Add debugging to your program, has support for large projects with multiple classes and debug levels per class. Supports optional enabling of debug per-level per-class and debug targets of files, Streams or stderr. Also supports timing between debug outputs, printing of stack traces for Throwables and files/line numbers on each message.

Debug now automatically figures out which class it was called from, so all methods passing in the calling class are deprecated.

The defaults are to print all messages to stderr with class and method name.

Should be called like this:

       if (Debug.debug) Debug.print(Debug.INFO, "Debug Message");

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static interface`
`Debug.FilterCommand`
This interface can be used to provide custom printing filters for certain classes.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`CRIT`
Highest priority messages
`static final boolean`
`debug`
Set this to false to disable compilation of Debug statements
`static final int`
`DEBUG`
Debug messages
`static PrintStream`
`debugout`
The current output stream (defaults to System.err)
`static final int`
`ERR`
Error messages
`static final int`
`INFO`
Information
`static final int`
`VERBOSE`
Verbose debug messages
`static final int`
`WARN`
Warnings

## Constructor Summary

Constructors
Constructor
Description
`Debug()`

## Method Summary

Modifier and Type
Method
Description
`static void`
`addFilterCommand(Class c, Debug.FilterCommand f)`
Add a filter command for a specific type.
`static boolean`
`debugging(Class c, int loglevel)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static boolean`
`debugging(String s, int loglevel)`
`static void`
`loadConfig(File f)`
Read which class to debug on at which level from the given File.
`static void`
`print(int loglevel, byte[] b)`
Log a byte array
`static void`
`print(int loglevel, Object o)`
Log an Object
`static void`
`print(int loglevel, String s)`
Log a String
`static void`
`print(int loglevel, Throwable t)`
Log a Throwable
`static void`
`print(Class c, int loglevel, Object d)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`print(Class c, int loglevel, String s)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`print(Class c, int loglevel, Throwable t)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`print(Object d)`
Log at DEBUG
`static void`
`print(Object o, int loglevel, Object d)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`print(Object o, int loglevel, String s)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`print(Object o, int loglevel, Throwable t)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`print(Object o, Object d)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`printMap(int loglevel, Map m)`
Log a Map
`static void`
`printMap(Class c, int loglevel, Map m)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`printMap(Object o, int loglevel, Map m)`
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
`static void`
`printMap(Map m)`
Log a Map at DEBUG log level
`static void`
`setByteArrayCount(int count)`
Set the size of hexdumps.
`static void`
`setByteArrayWidth(int width)`
Set the formatted width of hexdumps.
`static void`
`setHexDump(boolean hexdump)`
Enable or disable hexdumps.
`static void`
`setLineNos(boolean lines)`
Enable or disable line numbers.
`static void`
`setOutput()`
Output to the default debug.log
`static void`
`setOutput(PrintStream p)`
Output to the given Stream
`static void`
`setOutput(String filename)`
Output to the given file
`static void`
`setProperties(Properties prop)`
Set properties to configure debugging.
`static void`
`setThrowableTraces(boolean ttrace)`
Enable or disable stack traces in Debuging throwables.
`static void`
`setTiming(boolean timing)`
Enable or disable timing in Debug messages.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### CRIT

public static final int CRIT
Highest priority messages

See Also:
  - Constant Field Values

### ERR

public static final int ERR
Error messages

See Also:
  - Constant Field Values

### WARN

public static final int WARN
Warnings

See Also:
  - Constant Field Values

### INFO

public static final int INFO
Information

See Also:
  - Constant Field Values

### DEBUG

public static final int DEBUG
Debug messages

See Also:
  - Constant Field Values

### VERBOSE

public static final int VERBOSE
Verbose debug messages

See Also:
  - Constant Field Values

### debug

public static final boolean debug
Set this to false to disable compilation of Debug statements

See Also:
  - Constant Field Values

### debugout

public static PrintStream debugout
The current output stream (defaults to System.err)

## Constructor Details

### Debug

public Debug()

## Method Details

### setProperties

public static void setProperties(Properties prop)
Set properties to configure debugging. Format of properties is class => level, e.g.

          cx.ath.matthew.io.TeeOutputStream = INFO
          cx.ath.matthew.io.DOMPrinter = DEBUG

The debug level can be one of CRIT, ERR, WARN, INFO, DEBUG or VERBOSE which correspond to all messages up to that level. The special words YES, ALL and TRUE cause all messages to be printed regardless of level. All other terms disable messages for that class. CRIT and ERR messages are always printed if debugging is enabled unless explicitly disabled. The special class name ALL can be used to set the default level for all classes.

Parameters:
  `prop` - Properties object to use.

### loadConfig

public static void loadConfig(File f) throws IOException
Read which class to debug on at which level from the given File. Syntax the same as Java Properties files:

         <class> = <debuglevel>

E.G.

          cx.ath.matthew.io.TeeOutputStream = INFO
          cx.ath.matthew.io.DOMPrinter = DEBUG

The debug level can be one of CRIT, ERR, WARN, INFO, DEBUG or VERBOSE which correspond to all messages up to that level. The special words YES, ALL and TRUE cause all messages to be printed regardless of level. All other terms disable messages for that class. CRIT and ERR messages are always printed if debugging is enabled unless explicitly disabled. The special class name ALL can be used to set the default level for all classes.

Parameters:
  `f` - File to read from.
Throws:
  `IOException`

### debugging

public static boolean debugging(Class c, int loglevel)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.

### debugging

public static boolean debugging(String s, int loglevel)

### setOutput

public static void setOutput(PrintStream p) throws IOException
Output to the given Stream

Throws:
  `IOException`

### setOutput

public static void setOutput(String filename) throws IOException
Output to the given file

Throws:
  `IOException`

### setOutput

public static void setOutput() throws IOException
Output to the default debug.log

Throws:
  `IOException`

### print

public static void print(Object d)
Log at DEBUG

Parameters:
  `d` - The object to log

### print

public static void print(Object o, Object d)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log at DEBUG

Parameters:
  `o` - The object doing the logging
  `d` - The object to log

### print

public static void print(Object o, int loglevel, Object d)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log an Object

Parameters:
  `o` - The object doing the logging
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `d` - The object to log with d.toString()

### print

public static void print(Object o, int loglevel, String s)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log a String

Parameters:
  `o` - The object doing the logging
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `s` - The log message

### print

public static void print(Object o, int loglevel, Throwable t)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log a Throwable

Parameters:
  `o` - The object doing the logging
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `t` - The throwable to log with .toString and .printStackTrace

### print

public static void print(Class c, int loglevel, Throwable t)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log a Throwable

Parameters:
  `c` - The class doing the logging
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `t` - The throwable to log with .toString and .printStackTrace

### print

public static void print(int loglevel, Throwable t)
Log a Throwable

Parameters:
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `t` - The throwable to log with .toString and .printStackTrace
See Also:
  - `to turn on stack traces.`

### print

public static void print(int loglevel, byte[] b)
Log a byte array

Parameters:
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `b` - The byte array to print.
See Also:
  - `to enable hex dumping.`
  - `to change how many bytes are printed.`
  - `to change the formatting width of hex.`

### print

public static void print(int loglevel, String s)
Log a String

Parameters:
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `s` - The string to log with d.toString()

### print

public static void print(Class c, int loglevel, Object d)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log an Object

Parameters:
  `c` - The class doing the logging
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `d` - The object to log with d.toString()

### print

public static void print(Class c, int loglevel, String s)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log a String

Parameters:
  `c` - The class doing the logging
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `s` - The log message

### print

public static void print(int loglevel, Object o)
Log an Object

Parameters:
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `o` - The object to log

### printMap

public static void printMap(Object o, int loglevel, Map m)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log a Map

Parameters:
  `o` - The object doing the logging
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `m` - The Map to print out

### printMap

public static void printMap(Class c, int loglevel, Map m)
Deprecated.
In Java 1.5 calling class is automatically identified, no need to pass it in.
Log a Map

Parameters:
  `c` - The class doing the logging
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `m` - The Map to print out

### printMap

public static void printMap(Map m)
Log a Map at DEBUG log level

Parameters:
  `m` - The Map to print out

### printMap

public static void printMap(int loglevel, Map m)
Log a Map

Parameters:
  `loglevel` - The level to log at (DEBUG, WARN, etc)
  `m` - The Map to print out

### setThrowableTraces

public static void setThrowableTraces(boolean ttrace)
Enable or disable stack traces in Debuging throwables.

### setTiming

public static void setTiming(boolean timing)
Enable or disable timing in Debug messages.

### setLineNos

public static void setLineNos(boolean lines)
Enable or disable line numbers.

### setHexDump

public static void setHexDump(boolean hexdump)
Enable or disable hexdumps.

### setByteArrayCount

public static void setByteArrayCount(int count)
Set the size of hexdumps. (Default: 36)

### setByteArrayWidth

public static void setByteArrayWidth(int width)
Set the formatted width of hexdumps. (Default: 80 chars)

### addFilterCommand

public static void addFilterCommand(Class c, Debug.FilterCommand f)
Add a filter command for a specific type. This command will be called with the output stream and the text to be sent. It should perform any changes necessary to the text and then print the result to the output stream.