Often overlooked as a necessity is a sophisticated logging facility. With a sophisticated logging facility, you can feel more secure that your application will alert you proactively to a problem before a customer does. The logging facilities allows the definition of channels, then attaching a set of output streams to each channel. This allows log events to be differentiated, and sent to the appropriate destination.

    For example, errors of a critical nature, can be routed to the servlet log, critical errors logfile, and via email to the engineering team (or pagers). Log events of a debugging nature can be configured to to stderr, so a smart-ide can read them, and disabled in production environments.

    The logging facilities support string log entires, aswell as exceptions. Exception tracebacks are appropriately formatted to the destination stream (text or HTML), and written with an optional string describing the problem.

    The logging facility runs entirely in servlet space, and only makes use of the JSDK logging facility if it's connected to a channel, allowing the logging facilities to operate outside a servlet environment, such as a Jini distributed environment.