UNPKG

log4javascript

Version:
793 lines (792 loc) 214 kB
<?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> &lt; <code>DEBUG</code> &lt; <code>INFO</code> &lt; <code>WARN</code> &lt; <code>ERROR</code> &lt; <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"> &lt;script type="text/javascript" src="log4javascript.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; //&lt;![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)"); //]]&gt; &lt;/script&gt; </pre> <p> The full script: </p> <pre class="code"> &lt;script type="text/javascript" src="log4javascript.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; //&lt;![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)"); //]]&gt; &lt;/script&gt; </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>