log4javascript
Version:
793 lines (792 loc) • 214 kB
HTML
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>log4javascript 1.4 manual</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Tim Down - tim@log4javascript.org" />
<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
<meta name="robots" content="all" />
<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
</head>
<body>
<div id="container" class="nonav">
<div id="header">
<h1><a href="index.html">log4javascript</a></h1>
</div>
<div id="content">
<div id="nav">
<a class="navitem" href="../index.html">home</a>
| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
| <a class="navitem" href="index.html">docs</a>
| <a class="navitem" href="quickstart.html">quick start</a>
| <a class="navitem" href="../demos/index.html">demos</a>
| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
</div>
<h1>log4javascript 1.4 manual</h1>
<h2>Contents</h2>
<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#amd">AMD</a></li>
<li><a href="#noteaboutlog4javascript">Note about the log4javascript object</a></li>
<li>
<a href="#loggersappenderslayoutslevels">Loggers, appenders, layouts and levels</a>
<ul>
<li><a href="#configuration">Configuring appenders</a></li>
<li><a href="#loggersappenderslayoutslevelsexample">Example</a></li>
</ul>
</li>
<li><a href="#log4javascript">log4javascript static properties/methods</a></li>
<li><a href="#levels">Levels</a></li>
<li><a href="#loggers">Loggers</a></li>
<li>
<a href="#appenders">Appenders</a>
<ul>
<li><a href="#appender">Appender</a></li>
<li><a href="#alertappender">AlertAppender</a></li>
<li><a href="#ajaxappender">AjaxAppender</a></li>
<li><a href="#popupappender">PopUpAppender</a></li>
<li><a href="#inpageappender">InPageAppender</a></li>
<li><a href="#browserconsoleappender">BrowserConsoleAppender</a></li>
</ul>
</li>
<li>
<a href="#layouts">Layouts</a>
<ul>
<li><a href="#layout">Layout</a></li>
<li><a href="#nulllayout">NullLayout</a></li>
<li><a href="#simplelayout">SimpleLayout</a></li>
<li><a href="#patternlayout">PatternLayout</a></li>
<li><a href="#xmllayout">XmlLayout</a></li>
<li><a href="#jsonlayout">JsonLayout</a></li>
<li><a href="#httppostdatalayout">HttpPostDataLayout</a></li>
</ul>
</li>
<li><a href="#enabling">Enabling / disabling log4javascript</a></li>
<li>
<a href="#errorhandling">log4javascript error handling</a>
<ul>
<li><a href="#loglog">LogLog</a></li>
</ul>
</li>
<li><a href="#differences">Differences between log4javascript and log4j</a></li>
</ul>
<div id="intro">
<h2>Introduction</h2>
<p>
log4javascript currently exists to provide more flexible and configurable JavaScript logging
than that provided by browser developer tools. It works a very wide range of browsers. It was
originally written to ease the pain of JavaScript debugging in the days before browsers came
with advanced developer tools.
</p>
<p>
It requires only a JavaScript include and one line of code to initialize with default settings.
Having for several years used log4j and its .NET port log4net, it was natural for me to
base it on log4j.
</p>
<p class="linktotop">
<a href="#container">Top</a>
</p>
</div>
<div id="amd">
<h2>AMD</h2>
<p>
Since version 1.4.10, log4javascript comes with AMD support hence can be loaded by a script
loader such as <a href="http://requirejs.org/" title="RequireJS website (opens in new window)"
target="_blank">RequireJS</a>.
</p>
<p>
The current version of JavaScript is designed only to run in a browser. If not using AMD,
log4javascript creates a single property of the global object (to all intents and purposes, a
global variable) called <code>log4javascript</code>.
</p>
<p class="linktotop">
<a href="#container">Top</a>
</p>
</div>
<div id="noteaboutlog4javascript">
<h2>Note about the log4javascript object</h2>
<p>
All of log4javascript's instantiable classes are accessible via the log4javascript object, which
acts as a namespace. Therefore references to all class names must be preceded with
"log4javascript.". For example:
</p>
<p>
<code>var popUpAppender = new log4javascript.PopUpAppender();</code>
</p>
<p class="linktotop">
<a href="#container">Top</a>
</p>
</div>
<div id="loggersappenderslayoutslevels">
<h2>Loggers, Appenders, Layouts and Levels</h2>
<p>
A <em>logger</em> in log4javascript is the object on which log calls are
made. A logger may be assigned zero or more <em>appenders</em>.
An appender is an object that actually does the logging: for example,
a <code><a href="#popupappender">PopUpAppender</a></code> logs messages to
a pop-up console window while an <code><a href="#ajaxappender">AjaxAppender</a></code>
uses HTTP to send log messages back to the server. Each appender is assigned
a <em>layout</em>, which is responsible for formatting log messages that
are passed to an appender.
</p>
<p>
Every log message has a <em>level</em>. This is the severity of the message.
Available levels are <code>TRACE</code>, <code>DEBUG</code>, <code>INFO</code>,
<code>WARN</code>, <code>ERROR</code> and <code>FATAL</code> - these correspond to
the logging methods <code>trace</code>, <code>debug</code>, <code>info</code>,
<code>warn</code>, <code>error</code> and <code>fatal</code> of <code>Logger</code>.
Levels are ordered as follows: <code>TRACE</code> < <code>DEBUG</code> <
<code>INFO</code> < <code>WARN</code> < <code>ERROR</code> <
<code>FATAL</code>. This means the <code>FATAL</code> is the most severe and
<code>TRACE</code> the least. Also included are levels called <code>ALL</code>
and <code>OFF</code> intended to enable or disable all logging respectively.
</p>
<p>
Both loggers and appenders also have threshold levels (by default, <code>DEBUG</code>
for loggers and <code>ALL</code> for appenders).
Setting a level to either a logger or an appender disables log messages of severity
lower than that level. For instance, if a level of <code>INFO</code> is set on a
logger then only log messages of severity <code>INFO</code> or greater will be logged,
meaning <code>DEBUG</code> and <code>TRACE</code> messages will not be logged. If the
same logger had two appenders, one of level <code>DEBUG</code> and one of level
<code>WARN</code> then the first appender will still only log messages of
<code>INFO</code> or greater while the second appender will only log messages of level
<code>WARN</code> or greater.
</p>
<p>
This allows the developer fine control over which messages get logged where.
</p>
<div id="configuration">
<h3>Configuring appenders</h3>
<p>
From version 1.4, <strong>configuring appenders is only possible via configuration
methods</strong>. As the number of configuration options increases it becomes increasingly
undesirable to use constructor parameters, so support for it has been dropped.
</p>
</div>
<div id="loggersappenderslayoutslevelsexample">
<h3>Example</h3>
<p>
<strong>NB.</strong> The Ajax side of this example relies on having
server-side processing in place.
</p>
<p>
First, log4javascript is initialized, and a logger (actually the
anonymous logger) is assigned to a variable called <code>log</code>:
</p>
<pre class="code">
<script type="text/javascript" src="log4javascript.js"></script>
<script type="text/javascript">
//<![CDATA[
var log = log4javascript.getLogger();
</pre>
<p>
<code>log</code> does not yet have any appenders, so a call to <code>log.debug()</code>
will do nothing as yet. For this example we will use a
<code><a href="#popupappender">PopUpAppender</a></code> for debugging purposes.
Since the lifespan of the messages displayed in the pop-up is only going to be the
same as that of the window, a <code><a href="#patternlayout">PatternLayout</a></code>
is used that displays the time of the message and not the date (note that this is
also true of PopUpAppender's default layout). The format of the string passed into
PatternLayout is explained <a href="#patternlayout">below</a>.
</p>
<pre class="code">
var popUpAppender = new log4javascript.PopUpAppender();
var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");
popUpAppender.setLayout(popUpLayout);
log.addAppender(popUpAppender);
</pre>
<p>
Suppose that we also want to send log messages to the server, but limited to
error messages only. To achieve this we use an
<code><a href="#ajaxappender">AjaxAppender</a></code>. Note that if no layout is
specified then for convenience a default layout is used; in the case of
AjaxAppender, that is <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>,
which formats log messages as a standard HTTP POST string from which a simple
server-side script (not provided with log4javascript) will be able to extract
posted parameters. This is fine for our purposes:
</p>
<pre class="code">
var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");
ajaxAppender.setThreshold(log4javascript.Level.<code>ERROR</code>);
log.addAppender(ajaxAppender);
</pre>
<p>
Finally, some test log messages and the closing script tag:
</p>
<pre class="code">
log.debug("Debugging message (appears in pop-up)");
log.error("Error message (appears in pop-up and in server log)");
//]]>
</script>
</pre>
<p>
The full script:
</p>
<pre class="code">
<script type="text/javascript" src="log4javascript.js"></script>
<script type="text/javascript">
//<![CDATA[
var log = log4javascript.getLogger();
var popUpAppender = new log4javascript.PopUpAppender();
var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");
popUpAppender.setLayout(popUpLayout);
log.addAppender(popUpAppender);
var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");
ajaxAppender.setThreshold(log4javascript.Level.ERROR);
log.addAppender(ajaxAppender);
log.debug("Debugging message (appears in pop-up)");
log.error("Error message (appears in pop-up and in server log)");
//]]>
</script>
</pre>
<p>
<a href="../examples/example_manual.html" title="View example (opens in new window)"
target="_blank">See this example in action</a> (opens in new window)
</p>
</div>
<p class="linktotop">
<a href="#container">Top</a>
</p>
</div>
<div id="log4javascript">
<h2>log4javascript static properties/methods</h2>
<h4>Properties</h4>
<ul class="propertieslist">
<li class="property">
<div class="name">version</div>
<div class="summary">
The version number of your copy of log4javascript.
</div>
</li>
<li class="property">
<div class="name">edition</div>
<div class="summary">
The edition of your copy of log4javascript.
</div>
</li>
<li class="property">
<div class="name">logLog</div>
<div class="summary">
log4javascript's internal logging object. <a href="#loglog">See below for more details</a>.
</div>
</li>
</ul>
<h4>Methods</h4>
<ul class="propertieslist">
<li class="method">
<div class="name">getLogger</div>
<div class="methodsignature"><code>Logger <strong>getLogger</strong>([String <em>loggerName</em>])</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">loggerName</code>
[<em>optional</em>]
</li>
</ul>
<div class="summary">
<p>
Returns a logger with the specified name, creating it if a logger with that name does not
already exist. If no name is specified, a logger is returned with name <code>[anonymous]</code>, and
subsequent calls to <code>getLogger()</code> (with no logger name specified) will return
this same logger object.
</p>
<p>
Note that the names <code>[anonymous]</code>, <code>[default]</code>, <code>[null]</code>
and <code>root</code> are reserved for
the anonymous logger, default logger, null logger and root logger respectively.
</p>
</div>
</li>
<li class="method">
<div class="name">getDefaultLogger</div>
<div class="methodsignature"><code>Logger <strong>getDefaultLogger</strong>()</code></div>
<div class="summary">
<p>
Convenience method that returns the default logger. In the standard edition, the
default logger has a single appender: a
<code><a href="#popupappender">PopUpAppender</a></code> with the default layout,
width and height, and with <code>focusPopUp</code> set to false and
<code>lazyInit</code>, <code>useOldPopUp</code> and
<code>complainAboutPopUpBlocking</code> all set to true.
</p>
<p>
In the production edition, the default logger has no appenders.
</p>
</div>
</li>
<li class="method">
<div class="name">getNullLogger</div>
<div class="methodsignature"><code>Logger <strong>getNullLogger</strong>()</code></div>
<div class="summary">
Returns an empty logger with no appenders. Useful for disabling all logging.
</div>
</li>
<li class="method">
<div class="name">getRootLogger</div>
<div class="methodsignature"><code>Logger <strong>getRootLogger</strong>()</code></div>
<div class="summary">
Returns the root logger from which all other loggers derive.
</div>
</li>
<li class="method">
<div class="name">resetConfiguration</div>
<div class="methodsignature"><code>void <strong>resetConfiguration</strong>()</code></div>
<div class="summary">
Resets the all loggers to their default level.
</div>
</li>
<li class="method">
<div class="name">setEnabled</div>
<div class="methodsignature"><code>void <strong>setEnabled</strong>(Boolean <em>enabled</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">enabled</code>
</li>
</ul>
<div class="summary">
Enables or disables all logging, depending on <code>enabled</code>.
</div>
</li>
<li class="method">
<div class="name">isEnabled</div>
<div class="methodsignature"><code>Boolean <strong>isEnabled</strong>()</code></div>
<div class="summary">
Returns true or false depending on whether logging is enabled.
</div>
</li>
<li class="method" id="log4javascriptaddeventlistener">
<div class="name">addEventListener</div>
<div class="methodsignature"><code>void <strong>addEventListener</strong>(String <em>eventType</em>, Function <em>listener</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">eventType</code>
</li>
<li class="param">
<code class="paramname">listener</code>
</li>
</ul>
<div class="summary">
<p>
Adds a function to be called when an event of the type specified occurs in log4javascript.
Supported event types are <code>load</code> (occurs once the page has loaded) and
<code>error</code>.
</p>
<p>
Each listener is pased three paramaters:
</p>
<ul>
<li><code>sender</code>. The object that raised the event (i.e. the log4javascript object);</li>
<li><code>eventType</code>. The type of the event;</li>
<li>
<code>eventArgs</code>. An object containing of event-specific arguments. For the <code>error</code> event,
this is an object with properties <code>message</code> and <code>exception</code>. For the <code>load</code>
event this is an empty object.
</li>
</ul>
</div>
</li>
<li class="method">
<div class="name">removeEventListener</div>
<div class="methodsignature"><code>void <strong>removeEventListener</strong>(String <em>eventType</em>, Function <em>listener</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">eventType</code>
</li>
<li class="param">
<code class="paramname">listener</code>
</li>
</ul>
<div class="summary">
Removes the event listener function supplied for the event of the type specified.
</div>
</li>
<li class="method">
<div class="name">dispatchEvent</div>
<div class="methodsignature"><code>void <strong>dispatchEvent</strong>(String <em>eventType</em>, Object <em>eventArgs</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">eventType</code>
</li>
<li class="param">
<code class="paramname">eventArgs</code>
</li>
</ul>
<div class="summary">
Raises an event of type <code>eventType</code> on the <code>log4javascript</code> object.
Each of the listeners for this type of event (registered via <code>addEventListener</code>)
is called and passed <code>eventArgs</code> as the third parameter.
</div>
</li>
<li class="method">
<div class="name">setEventTypes</div>
<div class="methodsignature"><code>void <strong>setEventTypes</strong>(Array <em>eventTypes</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">eventTypes</code>
</li>
</ul>
<div class="summary">
Used internally to specify the types of events that the <code>log4javascript</code> object can raise.
</div>
</li>
<li class="method">
<div class="name">setShowStackTraces</div>
<div class="methodsignature"><code>void <strong>setShowStackTraces</strong>(Boolean <em>show</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">show</code>
</li>
</ul>
<div class="summary">
Enables or disables displaying of error stack traces, depending on <code>show</code>.
By default, stack traces are not displayed. (Only works in Firefox)
</div>
</li>
<li class="method">
<div class="name">evalInScope</div>
<div class="methodsignature"><code>Object <strong>evalInScope</strong>(String <em>expr</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">expr</code>
</li>
</ul>
<div class="summary">
This evaluates the given expression in the log4javascript scope, thus allowing
scripts to access internal log4javascript variables and functions. This was written
for the purposes of automated testing but could be used by custom extensions to
log4javascript.
</div>
</li>
</ul>
<p class="linktotop">
<a href="#container">Top</a>
</p>
</div>
<div id="levels">
<h2>Levels</h2>
<p>
Levels are available as static properties of the <code>log4javascript.Level</code>
object. In ascending order of severity:
</p>
<ol>
<li><code>log4javascript.Level.ALL</code></li>
<li><code>log4javascript.Level.TRACE</code></li>
<li><code>log4javascript.Level.DEBUG</code></li>
<li><code>log4javascript.Level.INFO</code></li>
<li><code>log4javascript.Level.WARN</code></li>
<li><code>log4javascript.Level.ERROR</code></li>
<li><code>log4javascript.Level.FATAL</code></li>
<li><code>log4javascript.Level.OFF</code></li>
</ol>
<p class="linktotop">
<a href="#container">Top</a>
</p>
</div>
<div id="loggers">
<h2>Loggers</h2>
<p>
It is possible to have multiple loggers in log4javascript. For example, you
may wish to have a logger for debugging purposes that logs messages to a
pop-up window and a separate logger that reports any client-side application
errors to the server via Ajax.
</p>
<div id="loggerhierarchy">
<h3>Logger hierarchy and appender additivity</h3>
<p>
From version 1.4, log4javascript has hierarchical loggers, implemented in the same way
as log4j. In summary, you specify a logger's parent logger by means of a dot between the
parent logger name and the child logger name. Therefore the logger <code>tim.app.security</code>
inherits from <code>tim.app</code>, which in turn inherits from <code>tim</code> which,
finally, inherits from the root logger.
</p>
<p>
What inheritance means for a logger is that in the absence of a threshold level set
specifically on the logger it inherits its level from its parent; also, a logger inherits
all its parent's appenders (this is known as <em>appender additivity</em> in log4j. This
behaviour can be enabled or disabled via <code>setAdditivity()</code>. See below). In the
above example, if the root logger has a level of <code>DEBUG</code> and one appender,
each of the loggers <code>tim.app.security</code>, <code>tim.app</code> and <code>tim</code> would
inherit the root level's appender. If, say, <code>tim.app</code>'s threshold level was set
to <code>WARN</code>, <code>tim</code>'s effective level would remain at <code>DEBUG</code>
(inherited from the root logger) while <code>tim.app.security</code>'s effective level would
be <code>WARN</code>, inherited from <code>tim.app</code>. The important thing to note is
that appenders accumulate down the logger hierarchy while levels are simply inherited from
the nearest ancestor with a threshold level set.
</p>
<p>
For a detailed explanation of the logger hierarchy, see the
<a href="http://logging.apache.org/log4j/docs/manual.html" target="_blank"
title="Log4j manual (opens in new window)">log4j manual</a>.
</p>
</div>
<p><strong>Notes</strong></p>
<ul>
<li>
It is not possible to instantiate loggers directly. Instead you must use
one of the methods of the <code>log4javascript</code> object: <code>getLogger</code>,
<code>getRootLogger</code>, <code>getDefaultLogger</code> or <code>getNullLogger</code>.
</li>
</ul>
<h4>Logger methods</h4>
<ul class="propertieslist">
<li class="method">
<div class="name">addAppender</div>
<div class="methodsignature"><code>void <strong>addAppender</strong>(Appender <em>appender</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">appender</code>
</li>
</ul>
<div class="summary">
Adds the given appender.
</div>
</li>
<li class="method">
<div class="name">removeAppender</div>
<div class="methodsignature"><code>void <strong>removeAppender</strong>(Appender <em>appender</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">appender</code>
</li>
</ul>
<div class="summary">
Removes the given appender.
</div>
</li>
<li class="method">
<div class="name">removeAllAppenders</div>
<div class="methodsignature"><code>void <strong>removeAllAppenders</strong>()</code></div>
<div class="summary">
Clears all appenders for the current logger.
</div>
</li>
<li class="method">
<div class="name">setLevel</div>
<div class="methodsignature"><code>void <strong>setLevel</strong>(Level <em>level</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">level</code>
</li>
</ul>
<div class="summary">
Sets the level. Log messages of a lower level than <code>level</code> will not be logged.
Default value is <code>DEBUG</code>.
</div>
</li>
<li class="method">
<div class="name">getLevel</div>
<div class="methodsignature"><code>Level <strong>getLevel</strong>()</code></div>
<div class="summary">
Returns the level explicitly set for this logger or <code>null</code> if none has been set.
</div>
</li>
<li class="method">
<div class="name">getEffectiveLevel</div>
<div class="methodsignature"><code>Level <strong>getEffectiveLevel</strong>()</code></div>
<div class="summary">
Returns the level at which the logger is operating. This is either the level explicitly
set on the logger or, if no level has been set, the effective level of the logger's parent.
</div>
</li>
<li class="method">
<div class="name">setAdditivity</div>
<div class="methodsignature"><code>void <strong>setAdditivity</strong>(Boolean <em>additivity</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">additivity</code>
</li>
</ul>
<div class="summary">
<p>
Sets whether appender additivity is enabled (the default) or disabled. If set to false, this
particular logger will not inherit any appenders form its ancestors. Any descendant of this
logger, however, will inherit from its ancestors as normal, unless its own additivity is
explicitly set to false.
</p>
<p>
Default value is <code>true</code>.
</p>
</div>
</li>
<li class="method">
<div class="name">getAdditivity</div>
<div class="methodsignature"><code>Boolean <strong>getAdditivity</strong>()</code></div>
<div class="summary">
Returns whether additivity is enabled for this logger.
</div>
</li>
<li class="method">
<div class="name">log</div>
<div class="methodsignature"><code>void <strong>log</strong>(Level <em>level</em>, Object <em>params</em>)</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">level</code>
</li>
<li class="param">
<code class="paramname">params</code>
</li>
</ul>
<div class="summary">
Generic logging method used by wrapper methods such as <code>debug</code>,
<code>error</code> etc.
</div>
<p><strong>Notes</strong></p>
<ul>
<li>
The signature of this method has changed in 1.4.
</li>
</ul>
</li>
<li class="method">
<div class="name">trace</div>
<div class="methodsignature"><code>void <strong>trace</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">message1[, message2...]</code>
</li>
<li class="param">
<code class="paramname">exception</code>
[<em>optional</em>]
</li>
</ul>
<div class="summary">
Logs one or more messages and optionally an error at level <code>TRACE</code>.
</div>
<p><strong>Notes</strong></p>
<ul>
<li>
Logging of multiple messages in one call is new in 1.4.
</li>
</ul>
</li>
<li class="method">
<div class="name">debug</div>
<div class="methodsignature"><code>void <strong>debug</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">message1[, message2...]</code>
</li>
<li class="param">
<code class="paramname">exception</code>
[<em>optional</em>]
</li>
</ul>
<div class="summary">
Logs one or more messages and optionally an error at level <code>DEBUG</code>.
</div>
<p><strong>Notes</strong></p>
<ul>
<li>
Logging of multiple messages in one call is new in 1.4.
</li>
</ul>
</li>
<li class="method">
<div class="name">info</div>
<div class="methodsignature"><code>void <strong>info</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">message1[, message2...]</code>
</li>
<li class="param">
<code class="paramname">exception</code>
[<em>optional</em>]
</li>
</ul>
<div class="summary">
Logs one or more messages and optionally an error at level <code>INFO</code>.
</div>
<p><strong>Notes</strong></p>
<ul>
<li>
Logging of multiple messages in one call is new in 1.4.
</li>
</ul>
</li>
<li class="method">
<div class="name">warn</div>
<div class="methodsignature"><code>void <strong>warn</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">message1[, message2...]</code>
</li>
<li class="param">
<code class="paramname">exception</code>
[<em>optional</em>]
</li>
</ul>
<div class="summary">
Logs one or more messages and optionally an error at level <code>WARN</code>.
</div>
<p><strong>Notes</strong></p>
<ul>
<li>
Logging of multiple messages in one call is new in 1.4.
</li>
</ul>
</li>
<li class="method">
<div class="name">error</div>
<div class="methodsignature"><code>void <strong>error</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">message1[, message2...]</code>
</li>
<li class="param">
<code class="paramname">exception</code>
[<em>optional</em>]
</li>
</ul>
<div class="summary">
Logs one or more messages and optionally an error at level <code>ERROR</code>.
</div>
<p><strong>Notes</strong></p>
<ul>
<li>
Logging of multiple messages in one call is new in 1.4.
</li>
</ul>
</li>
<li class="method">
<div class="name">fatal</div>
<div class="methodsignature"><code>void <strong>fatal</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
<div class="paramsheading">Parameters:</div>
<ul class="params">
<li class="param">
<code class="paramname">message1[, message2...]</code>
</li>
<li class="param">
<code class="paramname">exception</code>
[<em>optional</em>]
</li>
</ul>
<div class="summary">
Logs one or more messages and optionally an error at level <code>FATAL</code>.
</div>
<p><strong>Notes</strong></p>
<ul>
<li>
Logging of multiple messages in one call is new in 1.4.
</li>
</ul>
</li>