Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 35fa629a6b66fc27ce11736561ace37b > files > 23

haskell-hslogger-1.0.7-1mdv2009.1.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>System.Log.Logger</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
></SCRIPT
><SCRIPT TYPE="text/javascript"
>window.onload = function () {setSynopsis("mini_System-Log-Logger.html")};</SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>hslogger-1.0.7: Versatile logging framework</TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>System.Log.Logger</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>portable</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>provisional</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>John Goerzen &lt;jgoerzen@complete.org&gt; </TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>Basic Types
</A
></DT
><DD
><DL
><DT
><A HREF="#2"
>Re-Exported from System.Log
</A
></DT
></DL
></DD
><DT
><A HREF="#3"
>Logging Messages
</A
></DT
><DD
><DL
><DT
><A HREF="#4"
>Basic
</A
></DT
><DT
><A HREF="#5"
>Utility Functions
</A
></DT
><DT
><A HREF="#6"
>Logging to a particular Logger by object
</A
></DT
></DL
></DD
><DT
><A HREF="#7"
>Logger Manipulation
</A
></DT
><DD
><DL
><DT
><A HREF="#8"
>Finding / Creating Loggers
</A
></DT
><DT
><A HREF="#9"
>Modifying Loggers
</A
></DT
><DT
><A HREF="#10"
>Saving Your Changes
</A
></DT
></DL
></DD
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
><P
>Haskell Logging Framework, Primary Interface
</P
><P
>Written by John Goerzen, jgoerzen@complete.org
</P
><P
>Welcome to the error and information logging system for Haskell.
</P
><P
>This system is patterned after Python's <TT
>logging</TT
> module,
<A HREF="http://www.python.org/doc/current/lib/module-logging.html"
>http://www.python.org/doc/current/lib/module-logging.html</A
> and some of
the documentation here was based on documentation there.
</P
><P
>To log a message, you perform operations on <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>s.  Each <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
> has a
name, and they are arranged hierarchically.  Periods serve as separators.
Therefore, a <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
> named &quot;foo&quot; is the parent of loggers &quot;foo.printing&quot;,
&quot;foo.html&quot;, and &quot;foo.io&quot;.  These names can be anything you want.  They're
used to indicate the area of an application or library in which a logged
message originates.  Later you will see how you can use this concept to 
fine-tune logging behaviors based on specific application areas.
</P
><P
>You can also tune logging behaviors based upon how important a message is.
Each message you log will have an importance associated with it.  The different
importance levels are given by the <TT
><A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TT
> type.  I've also provided
some convenient functions that correspond to these importance levels:
<TT
><A HREF="System-Log-Logger.html#v%3AdebugM"
>debugM</A
></TT
> through <TT
><A HREF="System-Log-Logger.html#v%3AemergencyM"
>emergencyM</A
></TT
> log messages with the specified importance.
</P
><P
>Now, an importance level (or <TT
><A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TT
>) 
is associated not just with a particular message but also
with a <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>.  If the <TT
><A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TT
> of a given log message is lower than
the <TT
><A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TT
> configured in the <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>, that message is ignored.  This
way, you can globally control how verbose your logging output is.
</P
><P
>Now, let's follow what happens under the hood when you log a message.  We'll
assume for the moment that you are logging something with a high enough
<TT
><A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TT
> that it passes the test in your <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>.  In your code, you'll
call <TT
><A HREF="System-Log-Logger.html#v%3AlogM"
>logM</A
></TT
> or something like <TT
><A HREF="System-Log-Logger.html#v%3AdebugM"
>debugM</A
></TT
> to log the message.  Your <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>
decides to accept the message.  What next?
</P
><P
>Well, we also have a notion of <EM
>handlers</EM
> (<TT
><A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
></TT
>s, to be precise).
A <TT
><A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
></TT
> is a thing that takes a message and sends it somewhere.
That &quot;somewhere&quot; may be your screen (via standard error), your system's
logging infrastructure (via syslog), a file, or other things.  Each
<TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
> can have zero or more <TT
><A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
></TT
>s associated with it.  When your
<TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
> has a message to log, it passes it to every <TT
><A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
></TT
> it knows
of to process.  What's more, it is also passed to /all handlers of all
ancestors of the Logger/, regardless of whether those <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>s would
normally have passed on the message.
</P
><P
>To give you one extra little knob to turn, <TT
><A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
></TT
>s can also have
importance levels (<TT
><A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TT
>) associated with them in the same way
that <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>s do.  They act just like the <TT
><A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TT
> value in the
<TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>s -- as a filter.  It's useful, for instance, to make sure that
under no circumstances will a mere <TT
><A HREF="System-Log-Logger.html#v%3ADEBUG"
>DEBUG</A
></TT
> message show up in your syslog.
</P
><P
>There are three built-in handlers given in two built-in modules:
<A HREF="System-Log-Handler-Simple.html"
>System.Log.Handler.Simple</A
> and <A HREF="System-Log-Handler-Syslog.html"
>System.Log.Handler.Syslog</A
>.
</P
><P
>There is a special logger known as the <EM
>root logger</EM
> that sits at the top
of the logger hierarchy.  It is always present, and handlers attached
there will be called for every message.  You can use <TT
><A HREF="System-Log-Logger.html#v%3AgetRootLogger"
>getRootLogger</A
></TT
> to get
it or <TT
><A HREF="System-Log-Logger.html#v%3ArootLoggerName"
>rootLoggerName</A
></TT
> to work with it by name.
</P
><P
>Here's an example to illustrate some of these concepts:
</P
><PRE
> import System.Log.Logger
 import System.Log.Handler.Syslog
 
 -- By default, all messages of level WARNING and above are sent to stderr.
 -- Everything else is ignored.
 
 -- &quot;MyApp.Component&quot; is an arbitrary string; you can tune
 -- logging behavior based on it later.
 main = do
        debugM &quot;MyApp.Component&quot;  &quot;This is a debug message -- never to be seen&quot;
        warningM &quot;MyApp.Component2&quot; &quot;Something Bad is about to happen.&quot;
 
        -- Copy everything to syslog from here on out.
        s &lt;- openlog &quot;SyslogStuff&quot; [PID] USER DEBUG
        updateGlobalLogger rootLoggerName (addHandler s)
       
        errorM &quot;MyApp.Component&quot; &quot;This is going to stderr and syslog.&quot;

        -- Now we'd like to see everything from BuggyComponent
        -- at DEBUG or higher go to syslog and stderr.
        -- Also, we'd like to still ignore things less than
        -- WARNING in other areas.
        -- 
        -- So, we adjust the Logger for MyApp.Component.

        updateGlobalLogger &quot;MyApp.BuggyComponent&quot;
                           (setLevel DEBUG)

        -- This message will go to syslog and stderr
        debugM &quot;MyApp.BuggyComponent&quot; &quot;This buggy component is buggy&quot;
 
        -- This message will go to syslog and stderr too.
        warningM &quot;MyApp.BuggyComponent&quot; &quot;Still Buggy&quot;
 
        -- This message goes nowhere.
        debugM &quot;MyApp.WorkingComponent&quot; &quot;Hello&quot;
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ALogger"
>Logger</A
> </TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3APriority"
>Priority</A
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3ADEBUG"
>DEBUG</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AINFO"
>INFO</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ANOTICE"
>NOTICE</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AWARNING"
>WARNING</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AERROR"
>ERROR</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ACRITICAL"
>CRITICAL</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AALERT"
>ALERT</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AEMERGENCY"
>EMERGENCY</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AlogM"
>logM</A
> :: String -&gt; <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
> -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdebugM"
>debugM</A
> :: String -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AinfoM"
>infoM</A
> :: String -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnoticeM"
>noticeM</A
> :: String -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AwarningM"
>warningM</A
> :: String -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AerrorM"
>errorM</A
> :: String -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AcriticalM"
>criticalM</A
> :: String -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AalertM"
>alertM</A
> :: String -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AemergencyM"
>emergencyM</A
> :: String -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Atraplogging"
>traplogging</A
> ::  String -&gt; <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
> -&gt; String -&gt; IO a -&gt; IO a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AlogL"
>logL</A
> :: <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
> -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AgetLogger"
>getLogger</A
> :: String -&gt; IO <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AgetRootLogger"
>getRootLogger</A
> :: IO <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArootLoggerName"
>rootLoggerName</A
> :: String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AaddHandler"
>addHandler</A
> :: <A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
> a =&gt; a -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsetHandlers"
>setHandlers</A
> :: <A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
> a =&gt; [a] -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AgetLevel"
>getLevel</A
> :: <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsetLevel"
>setLevel</A
> :: <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsaveGlobalLogger"
>saveGlobalLogger</A
> :: <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AupdateGlobalLogger"
>updateGlobalLogger</A
> :: String -&gt; (<A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
>) -&gt; IO ()</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="1"
>Basic Types
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t%3ALogger"
></A
><B
>Logger</B
>  </TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="2"
>Re-Exported from System.Log
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t%3APriority"
></A
><B
>Priority</B
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>Priorities are used to define how important a log messgae is.
Users can filter log messages based on priorities.
</P
><P
>These have their roots on the traditional syslog system.  The standard
definitions are given below, but you are free to interpret them however you
like.  They are listed here in ascending importance order.
</P
></TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3ADEBUG"
></A
><B
>DEBUG</B
></TD
><TD CLASS="rdoc"
>Debug messages
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AINFO"
></A
><B
>INFO</B
></TD
><TD CLASS="rdoc"
>Information
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ANOTICE"
></A
><B
>NOTICE</B
></TD
><TD CLASS="rdoc"
>Normal runtime conditions
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AWARNING"
></A
><B
>WARNING</B
></TD
><TD CLASS="rdoc"
>General Warnings
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AERROR"
></A
><B
>ERROR</B
></TD
><TD CLASS="rdoc"
>General Errors
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ACRITICAL"
></A
><B
>CRITICAL</B
></TD
><TD CLASS="rdoc"
>Severe situations
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AALERT"
></A
><B
>ALERT</B
></TD
><TD CLASS="rdoc"
>Take immediate action
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AEMERGENCY"
></A
><B
>EMERGENCY</B
></TD
><TD CLASS="rdoc"
>System is unusable
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Priority')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:Priority" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
>Eq <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TD
></TR
><TR
><TD CLASS="decl"
>Ord <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TD
></TR
><TR
><TD CLASS="decl"
>Read <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TD
></TR
><TR
><TD CLASS="decl"
>Show <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="3"
>Logging Messages
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="4"
>Basic
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AlogM"
></A
><B
>logM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Name of the logger to use
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TD
><TD CLASS="rdoc"
>Priority of this message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>The log text itself
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message using the given logger at a given priority. 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="5"
>Utility Functions
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AdebugM"
></A
><B
>debugM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>Log message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message at <TT
><A HREF="System-Log-Logger.html#v%3ADEBUG"
>DEBUG</A
></TT
> priority 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AinfoM"
></A
><B
>infoM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>Log message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message at <TT
><A HREF="System-Log-Logger.html#v%3AINFO"
>INFO</A
></TT
> priority 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AnoticeM"
></A
><B
>noticeM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>Log message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message at <TT
><A HREF="System-Log-Logger.html#v%3ANOTICE"
>NOTICE</A
></TT
> priority 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AwarningM"
></A
><B
>warningM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>Log message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message at <TT
><A HREF="System-Log-Logger.html#v%3AWARNING"
>WARNING</A
></TT
> priority 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AerrorM"
></A
><B
>errorM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>Log message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message at <TT
><A HREF="System-Log-Logger.html#v%3AERROR"
>ERROR</A
></TT
> priority 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AcriticalM"
></A
><B
>criticalM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>Log message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message at <TT
><A HREF="System-Log-Logger.html#v%3ACRITICAL"
>CRITICAL</A
></TT
> priority 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AalertM"
></A
><B
>alertM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>Log message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message at <TT
><A HREF="System-Log-Logger.html#v%3AALERT"
>ALERT</A
></TT
> priority 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AemergencyM"
></A
><B
>emergencyM</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; String</TD
><TD CLASS="rdoc"
>Log message
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Log a message at <TT
><A HREF="System-Log-Logger.html#v%3AEMERGENCY"
>EMERGENCY</A
></TT
> priority 
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Atraplogging"
></A
><B
>traplogging</B
> ::  String -&gt; <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
> -&gt; String -&gt; IO a -&gt; IO a</TD
></TR
><TR
><TD CLASS="doc"
><P
>Traps exceptions that may occur, logging them, then passing them on.
</P
><P
>Takes a logger name, priority, leading description text (you can set it to
<TT
>&quot;&quot;</TT
> if you don't want any), and action to run.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="6"
>Logging to a particular Logger by object
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AlogL"
></A
><B
>logL</B
> :: <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
> -&gt; String -&gt; IO ()</TD
></TR
><TR
><TD CLASS="doc"
>Log a message, assuming the current logger's level permits it.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="7"
>Logger Manipulation
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>These functions help you work with loggers.  There are some
special things to be aware of.
</P
><P
>First of all, whenever you first access a given logger by name, it
magically springs to life.  It has a default <TT
><A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TT
> of <TT
><A HREF="System-Log-Logger.html#v%3ADEBUG"
>DEBUG</A
></TT
>
and an empty handler list -- which means that it will inherit whatever its
parents do.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="8"
>Finding / Creating Loggers
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AgetLogger"
></A
><B
>getLogger</B
> :: String -&gt; IO <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="doc"
>Returns the logger for the given name.  If no logger with that name
 exists, creates new loggers and any necessary parent loggers, with
 no connected handlers.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AgetRootLogger"
></A
><B
>getRootLogger</B
> :: IO <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="doc"
>Returns the root logger.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArootLoggerName"
></A
><B
>rootLoggerName</B
> :: String</TD
></TR
><TR
><TD CLASS="doc"
><P
>This is the base class for the various log handlers.  They should
all adhere to this class. 
</P
><P
>The name of the root logger, which is always defined and present
 on the system.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="9"
>Modifying Loggers
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Keep in mind that &quot;modification&quot; here is modification in the Haskell
sense.  We do not actually cause mutation in a specific <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>.  Rather,
we return you a new <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
> object with the change applied.
</P
><P
>Also, please note that these functions will not have an effect on the
global <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
> hierarchy.  You may use your new <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>s locally,
but other functions won't see the changes.  To make a change global,
you'll need to use <TT
><A HREF="System-Log-Logger.html#v%3AupdateGlobalLogger"
>updateGlobalLogger</A
></TT
> or <TT
><A HREF="System-Log-Logger.html#v%3AsaveGlobalLogger"
>saveGlobalLogger</A
></TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AaddHandler"
></A
><B
>addHandler</B
> :: <A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
> a =&gt; a -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="doc"
>Add handler to <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>.  Returns a new <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AsetHandlers"
></A
><B
>setHandlers</B
> :: <A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
> a =&gt; [a] -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="doc"
>Set the 'Logger'\'s list of handlers to the list supplied.
 All existing handlers are removed first.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AgetLevel"
></A
><B
>getLevel</B
> :: <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
></TD
></TR
><TR
><TD CLASS="doc"
>Returns the <A HREF="level.html"
>level</A
> of the logger.  Items beneath this
 level will be ignored.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AsetLevel"
></A
><B
>setLevel</B
> :: <A HREF="System-Log-Logger.html#t%3APriority"
>Priority</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
></TR
><TR
><TD CLASS="doc"
>Sets the <A HREF="level.html"
>level</A
> of the <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
>.  Returns a new
 <TT
><A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TT
> object with the new level.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="10"
>Saving Your Changes
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
>These functions commit changes you've made to loggers to the global
logger hierarchy. 
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AsaveGlobalLogger"
></A
><B
>saveGlobalLogger</B
> :: <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; IO ()</TD
></TR
><TR
><TD CLASS="doc"
>Updates the global record for the given logger to take into
 account any changes you may have made.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AupdateGlobalLogger"
></A
><B
>updateGlobalLogger</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: String</TD
><TD CLASS="rdoc"
>Logger name
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
> -&gt; <A HREF="System-Log-Logger.html#t%3ALogger"
>Logger</A
></TD
><TD CLASS="rdoc"
>Function to call
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; IO ()</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>Helps you make changes on the given logger.  Takes a function
that makes changes and writes those changes back to the global
database.  Here's an example from above (&quot;s&quot; is a <TT
><A HREF="System-Log-Handler.html#t%3ALogHandler"
>LogHandler</A
></TT
>):
</P
><PRE
> updateGlobalLogger &quot;MyApp.BuggyComponent&quot;
                    (setLevel DEBUG . setHandlers [s])
</PRE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 2.4.1</TD
></TR
></TABLE
></BODY
></HTML
>