|
One sentence of caution, however: using code to manipulate the logging of events can make ones code less configurable at runtime by the end user. It is best to use these controls such that the end user has control over whether they are called. For example, it is useful for a program with a GUI to be able to enable or disable tracing if the user clicks on a dialog to enable tracing.
enableEventtype(true|false)
function. This
works only with the types error, warning, notice, and trace. The
signatures of these functions are:
public static void enableErrors(boolean); public static void enableWarnings(boolean); public static void enableNotices(boolean); public static void enableTraces(boolean);So, at any point in the operation of the program, one can perform the following bit of logic:Log.enableErrors(true); Log.error(...); Log.enableErrors(false);One can determine if any of the basic event types are enabled by calling theeventtypeEnabled()
static functions:if (Log.tracesEnabled()) Log.enableTraces(false);The above example only illustrates the use of theLog.tracesEnabled()
function. One doesn't need to check whether an event type is enabled or disabled before enabling or disabling it.General Event Type Enabling
From within the JVM
One can check and enable or disable any event type using the calls:
Log log = Log.getInstance(); if (log.eventTypeEnabled("timing")) { log.enableEventType("timing", true); }Notice, since these calls aren't static, they must call the staticgetInstance()
function to gain access to the singelton Log object.Outside the JVM
These functions may also be called from a remote virtual machine. It's a handy way to control the logging of a server process. The following illustrates the steps to accomplish this:
- Start server using -Dlog.server=true -Dlog.name=Foobar
- From the remote controlling JVM, lookup the server's Distributer in the registry under the name "Foobar". One can use
java.rmi.Naming("rmi://host/log.distributer.Foobar");
to find the Distributer in the registry. One can also usegrace.util.Registry.lookup("rmi://host/log.distributer.*")
to find a list of distributers if the specific server name is not known.- Use the found distributer to call
distributer.enableEventType(Log.TRACES);
Regular Expression Event Filtering
Events can also be filtered by regular expression. This can be specified by the log.events.include/exclude properties or in code. In code, this is done using the calls:public void setEventTypesToInclude(String filters); public void setEventTypesToExclude(String filters);In both cases, the filter argument is a string separated list of regular expressions, each expression acting to either include or exclude an event. So the code:Log log = Log.getInstance(); log.setEventTypesToInclude("error warn.* tim.*"); log.setEventTypesToExclude("timi.*");will have the following effect on the following event types:error included warning included time included timing excludedRegular Expression Function Filtering
As in the above event case, functions can also be filtered using a space separated list of regular expressions. The functions, are:public void setFunctionNamesToInclude(String filters); public void setFunctionNamesToExclude(String filters);Log log = Log.getInstance(); log.setFunctionNamesToInclude("MyClass\\..*"); log.setFunctionNamesToExclude("MyClass\\..toString");will have the following effect on the following events:MyClass.doSomething() included MyClass.doAnotherThing() included MyClass.toString() excludedSetting Different Properties
JavaLog loads its properties from System.getProperties() when it is statically initialized. The user can specify a different set of properties using the call:public void loadProperties(java.util.Properties extraProperties);However, these properties currently only effect the loading of the above discussed filters. In other words, they don't affect the configuration of handlers or formatting, etc. Eventually, this functionality will be enabled.