134 lines
40 KiB
HTML
134 lines
40 KiB
HTML
<!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"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>System.Log.Logger</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
|
|
window.onload = function () {pageLoad();setSynopsis("mini_System-Log-Logger.html");};
|
|
//]]>
|
|
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">hslogger-1.2.8: Versatile logging framework</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Copyright</th><td>Copyright (C) 2004-2011 John Goerzen</td></tr><tr><th>License</th><td>BSD3</td></tr><tr><th>Maintainer</th><td>John Goerzen <jgoerzen@complete.org> </td></tr><tr><th>Stability</th><td>provisional</td></tr><tr><th>Portability</th><td>portable</td></tr><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell98</td></tr></table><p class="caption">System.Log.Logger</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Basic Types</a><ul><li><a href="#g:2">Re-Exported from System.Log</a></li></ul></li><li><a href="#g:3">Logging Messages</a><ul><li><a href="#g:4">Basic</a></li><li><a href="#g:5">Utility Functions</a></li><li><a href="#g:6">Logging to a particular Logger by object</a></li></ul></li><li><a href="#g:7">Logger Manipulation</a><ul><li><a href="#g:8">Finding / Creating Loggers</a></li><li><a href="#g:9">Modifying Loggers</a></li><li><a href="#g:10">Saving Your Changes</a></li></ul></li></ul></div><div id="description"><p class="caption">Description</p><div 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 <code>logging</code> 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 <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>s. Each <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code> has a
|
|
name, and they are arranged hierarchically. Periods serve as separators.
|
|
Therefore, a <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code> named "foo" is the parent of loggers "foo.printing",
|
|
"foo.html", and "foo.io". 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 <code><a href="System-Log-Logger.html#t:Priority">Priority</a></code> type. I've also provided
|
|
some convenient functions that correspond to these importance levels:
|
|
<code><a href="System-Log-Logger.html#v:debugM">debugM</a></code> through <code><a href="System-Log-Logger.html#v:emergencyM">emergencyM</a></code> log messages with the specified importance.</p><p>Now, an importance level (or <code><a href="System-Log-Logger.html#t:Priority">Priority</a></code>)
|
|
is associated not just with a particular message but also
|
|
with a <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>. If the <code><a href="System-Log-Logger.html#t:Priority">Priority</a></code> of a given log message is lower than
|
|
the <code><a href="System-Log-Logger.html#t:Priority">Priority</a></code> configured in the <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>, 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
|
|
<code><a href="System-Log-Logger.html#t:Priority">Priority</a></code> that it passes the test in your <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>. In your code, you'll
|
|
call <code><a href="System-Log-Logger.html#v:logM">logM</a></code> or something like <code><a href="System-Log-Logger.html#v:debugM">debugM</a></code> to log the message. Your <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>
|
|
decides to accept the message. What next?</p><p>Well, we also have a notion of <em>handlers</em> (<code><a href="System-Log-Handler.html#t:LogHandler">LogHandler</a></code>s, to be precise).
|
|
A <code><a href="System-Log-Handler.html#t:LogHandler">LogHandler</a></code> is a thing that takes a message and sends it somewhere.
|
|
That "somewhere" may be your screen (via standard error), your system's
|
|
logging infrastructure (via syslog), a file, or other things. Each
|
|
<code><a href="System-Log-Logger.html#t:Logger">Logger</a></code> can have zero or more <code><a href="System-Log-Handler.html#t:LogHandler">LogHandler</a></code>s associated with it. When your
|
|
<code><a href="System-Log-Logger.html#t:Logger">Logger</a></code> has a message to log, it passes it to every <code><a href="System-Log-Handler.html#t:LogHandler">LogHandler</a></code> 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 <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>s would
|
|
normally have passed on the message.</p><p>Each <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code> can <em>optionally</em> store a <code><a href="System-Log-Logger.html#t:Priority">Priority</a></code>. If a given Logger does
|
|
not have a Priority, and you log a message to that logger, the system will
|
|
use the priority of the parent of the destination logger to find out whether
|
|
to log the message. If the parent has no priority associated with it,
|
|
the system continues walking up the tree to figure out a priority until
|
|
it hits the root logger. In this way, you can easily adjust the priority
|
|
of an entire subtree of loggers. When a new logger is created, it has no
|
|
priority by default. The exception is the root logger, which has a WARNING
|
|
priority by default.</p><p>To give you one extra little knob to turn, <code><a href="System-Log-Handler.html#t:LogHandler">LogHandler</a></code>s can also have
|
|
importance levels (<code><a href="System-Log-Logger.html#t:Priority">Priority</a></code>) associated with them in the same way
|
|
that <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>s do. They act just like the <code><a href="System-Log-Logger.html#t:Priority">Priority</a></code> value in the
|
|
<code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>s -- as a filter. It's useful, for instance, to make sure that
|
|
under no circumstances will a mere <code><a href="System-Log-Logger.html#v:DEBUG">DEBUG</a></code> 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 <code><a href="System-Log-Logger.html#v:getRootLogger">getRootLogger</a></code> to get
|
|
it or <code><a href="System-Log-Logger.html#v:rootLoggerName">rootLoggerName</a></code> to work with it by name.</p><p>The formatting of log messages may be customized by setting a <code><a href="System-Log-Formatter.html#t:LogFormatter">LogFormatter</a></code>
|
|
on the desired <code><a href="System-Log-Handler.html#t:LogHandler">LogHandler</a></code>. There are a number of simple formatters defined
|
|
in <a href="System-Log-Formatter.html">System.Log.Formatter</a>, which may be used directly, or extend to create
|
|
your own formatter.</p><p>Here's an example to illustrate some of these concepts:</p><pre>import System.Log.Logger
|
|
import System.Log.Handler.Syslog
|
|
import System.Log.Handler.Simple
|
|
import System.Log.Handler (setFormatter)
|
|
import System.Log.Formatter
|
|
|
|
-- By default, all messages of level WARNING and above are sent to stderr.
|
|
-- Everything else is ignored.
|
|
|
|
-- "MyApp.Component" is an arbitrary string; you can tune
|
|
-- logging behavior based on it later.
|
|
main = do
|
|
debugM "MyApp.Component" "This is a debug message -- never to be seen"
|
|
warningM "MyApp.Component2" "Something Bad is about to happen."
|
|
|
|
-- Copy everything to syslog from here on out.
|
|
s <- openlog "SyslogStuff" [PID] USER DEBUG
|
|
updateGlobalLogger rootLoggerName (addHandler s)
|
|
|
|
errorM "MyApp.Component" "This is going to stderr and syslog."
|
|
|
|
-- 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.BuggyComponent.
|
|
|
|
updateGlobalLogger "MyApp.BuggyComponent"
|
|
(setLevel DEBUG)
|
|
|
|
-- This message will go to syslog and stderr
|
|
debugM "MyApp.BuggyComponent" "This buggy component is buggy"
|
|
|
|
-- This message will go to syslog and stderr too.
|
|
warningM "MyApp.BuggyComponent" "Still Buggy"
|
|
|
|
-- This message goes nowhere.
|
|
debugM "MyApp.WorkingComponent" "Hello"
|
|
|
|
-- Now we decide we'd also like to log everything from BuggyComponent at DEBUG
|
|
-- or higher to a file for later diagnostics. We'd also like to customize the
|
|
-- format of the log message, so we use a 'simpleLogFormatter'
|
|
|
|
h <- fileHandler "debug.log" DEBUG >>= \lh -> return $
|
|
setFormatter lh (simpleLogFormatter "[$time : $loggername : $prio] $msg")
|
|
updateGlobalLogger "MyApp.BuggyComponent" (addHandler h)
|
|
|
|
-- This message will go to syslog and stderr,
|
|
-- and to the file "debug.log" with a format like :
|
|
-- [2010-05-23 16:47:28 : MyApp.BuggyComponent : DEBUG] Some useful diagnostics...
|
|
debugM "MyApp.BuggyComponent" "Some useful diagnostics..."
|
|
|
|
</pre></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span> <a href="#t:Logger">Logger</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:Priority">Priority</a><ul class="subs"><li>= <a href="#v:DEBUG">DEBUG</a></li><li>| <a href="#v:INFO">INFO</a></li><li>| <a href="#v:NOTICE">NOTICE</a></li><li>| <a href="#v:WARNING">WARNING</a></li><li>| <a href="#v:ERROR">ERROR</a></li><li>| <a href="#v:CRITICAL">CRITICAL</a></li><li>| <a href="#v:ALERT">ALERT</a></li><li>| <a href="#v:EMERGENCY">EMERGENCY</a></li></ul></li><li class="src short"><a href="#v:logM">logM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="System-Log-Logger.html#t:Priority">Priority</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:debugM">debugM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:infoM">infoM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:noticeM">noticeM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:warningM">warningM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:errorM">errorM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:criticalM">criticalM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:alertM">alertM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:emergencyM">emergencyM</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:removeAllHandlers">removeAllHandlers</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:traplogging">traplogging</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="System-Log-Logger.html#t:Priority">Priority</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> a -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> a</li><li class="src short"><a href="#v:logL">logL</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Priority">Priority</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:getLogger">getLogger</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> <a href="System-Log-Logger.html#t:Logger">Logger</a></li><li class="src short"><a href="#v:getRootLogger">getRootLogger</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> <a href="System-Log-Logger.html#t:Logger">Logger</a></li><li class="src short"><a href="#v:rootLoggerName">rootLoggerName</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></li><li class="src short"><a href="#v:addHandler">addHandler</a> :: <a href="System-Log-Handler.html#t:LogHandler">LogHandler</a> a => a -> <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></li><li class="src short"><a href="#v:removeHandler">removeHandler</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></li><li class="src short"><a href="#v:setHandlers">setHandlers</a> :: <a href="System-Log-Handler.html#t:LogHandler">LogHandler</a> a => [a] -> <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></li><li class="src short"><a href="#v:getLevel">getLevel</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="System-Log-Logger.html#t:Priority">Priority</a></li><li class="src short"><a href="#v:setLevel">setLevel</a> :: <a href="System-Log-Logger.html#t:Priority">Priority</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></li><li class="src short"><a href="#v:clearLevel">clearLevel</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></li><li class="src short"><a href="#v:saveGlobalLogger">saveGlobalLogger</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:updateGlobalLogger">updateGlobalLogger</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> (<a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a>) -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</li></ul></div><div id="interface"><h1 id="g:1">Basic Types</h1><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Logger" class="def">Logger</a></p></div><h2 id="g:2">Re-Exported from System.Log</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Priority" class="def">Priority</a></p><div class="doc"><p>Priorities are used to define how important a log message 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></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:DEBUG" class="def">DEBUG</a></td><td class="doc"><p>Debug messages</p></td></tr><tr><td class="src"><a name="v:INFO" class="def">INFO</a></td><td class="doc"><p>Information</p></td></tr><tr><td class="src"><a name="v:NOTICE" class="def">NOTICE</a></td><td class="doc"><p>Normal runtime conditions</p></td></tr><tr><td class="src"><a name="v:WARNING" class="def">WARNING</a></td><td class="doc"><p>General Warnings</p></td></tr><tr><td class="src"><a name="v:ERROR" class="def">ERROR</a></td><td class="doc"><p>General Errors</p></td></tr><tr><td class="src"><a name="v:CRITICAL" class="def">CRITICAL</a></td><td class="doc"><p>Severe situations</p></td></tr><tr><td class="src"><a name="v:ALERT" class="def">ALERT</a></td><td class="doc"><p>Take immediate action</p></td></tr><tr><td class="src"><a name="v:EMERGENCY" class="def">EMERGENCY</a></td><td class="doc"><p>System is unusable</p></td></tr></table></div><div class="subs instances"><p id="control.i:Priority" class="caption collapser" onclick="toggleSection('i:Priority')">Instances</p><div id="section.i:Priority" class="show"><table><tr><td class="src"><a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="System-Log-Logger.html#t:Priority">Priority</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="System-Log-Logger.html#t:Priority">Priority</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Text-Read.html#t:Read">Read</a> <a href="System-Log-Logger.html#t:Priority">Priority</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Text-Show.html#t:Show">Show</a> <a href="System-Log-Logger.html#t:Priority">Priority</a></td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:3">Logging Messages</h1><h2 id="g:4">Basic</h2><div class="top"><p class="src"><a name="v:logM" class="def">logM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Name of the logger to use</p></td></tr><tr><td class="src">-> <a href="System-Log-Logger.html#t:Priority">Priority</a></td><td class="doc"><p>Priority of this message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>The log text itself</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message using the given logger at a given priority. </p></div></div><h2 id="g:5">Utility Functions</h2><div class="top"><p class="src"><a name="v:debugM" class="def">debugM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Log message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message at <code><a href="System-Log-Logger.html#v:DEBUG">DEBUG</a></code> priority </p></div></div><div class="top"><p class="src"><a name="v:infoM" class="def">infoM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Log message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message at <code><a href="System-Log-Logger.html#v:INFO">INFO</a></code> priority </p></div></div><div class="top"><p class="src"><a name="v:noticeM" class="def">noticeM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Log message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message at <code><a href="System-Log-Logger.html#v:NOTICE">NOTICE</a></code> priority </p></div></div><div class="top"><p class="src"><a name="v:warningM" class="def">warningM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Log message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message at <code><a href="System-Log-Logger.html#v:WARNING">WARNING</a></code> priority </p></div></div><div class="top"><p class="src"><a name="v:errorM" class="def">errorM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Log message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message at <code><a href="System-Log-Logger.html#v:ERROR">ERROR</a></code> priority </p></div></div><div class="top"><p class="src"><a name="v:criticalM" class="def">criticalM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Log message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message at <code><a href="System-Log-Logger.html#v:CRITICAL">CRITICAL</a></code> priority </p></div></div><div class="top"><p class="src"><a name="v:alertM" class="def">alertM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Log message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message at <code><a href="System-Log-Logger.html#v:ALERT">ALERT</a></code> priority </p></div></div><div class="top"><p class="src"><a name="v:emergencyM" class="def">emergencyM</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Log message</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><p>Log a message at <code><a href="System-Log-Logger.html#v:EMERGENCY">EMERGENCY</a></code> priority </p></div></div><div class="top"><p class="src"><a name="v:removeAllHandlers" class="def">removeAllHandlers</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</p><div class="doc"><p>Allow gracefull shutdown. Release all opened files<em>handlers</em>etc.</p></div></div><div class="top"><p class="src"><a name="v:traplogging" class="def">traplogging</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="System-Log-Logger.html#t:Priority">Priority</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> a -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> a</p><div 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
|
|
<code>""</code> if you don't want any), and action to run.</p></div></div><h2 id="g:6">Logging to a particular Logger by object</h2><div class="top"><p class="src"><a name="v:logL" class="def">logL</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Priority">Priority</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</p><div class="doc"><p>Log a message, assuming the current logger's level permits it.</p></div></div><h1 id="g:7">Logger Manipulation</h1><div 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 <code><a href="System-Log-Logger.html#t:Priority">Priority</a></code> of Nothing
|
|
and an empty handler list -- which means that it will inherit whatever its
|
|
parents do.</p></div><h2 id="g:8">Finding / Creating Loggers</h2><div class="top"><p class="src"><a name="v:getLogger" class="def">getLogger</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> <a href="System-Log-Logger.html#t:Logger">Logger</a></p><div class="doc"><p>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.</p></div></div><div class="top"><p class="src"><a name="v:getRootLogger" class="def">getRootLogger</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> <a href="System-Log-Logger.html#t:Logger">Logger</a></p><div class="doc"><p>Returns the root logger.</p></div></div><div class="top"><p class="src"><a name="v:rootLoggerName" class="def">rootLoggerName</a> :: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></p><div 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></div></div><h2 id="g:9">Modifying Loggers</h2><div class="doc"><p>Keep in mind that "modification" here is modification in the Haskell
|
|
sense. We do not actually cause mutation in a specific <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>. Rather,
|
|
we return you a new <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code> object with the change applied.</p><p>Also, please note that these functions will not have an effect on the
|
|
global <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code> hierarchy. You may use your new <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>s locally,
|
|
but other functions won't see the changes. To make a change global,
|
|
you'll need to use <code><a href="System-Log-Logger.html#v:updateGlobalLogger">updateGlobalLogger</a></code> or <code><a href="System-Log-Logger.html#v:saveGlobalLogger">saveGlobalLogger</a></code>.</p></div><div class="top"><p class="src"><a name="v:addHandler" class="def">addHandler</a> :: <a href="System-Log-Handler.html#t:LogHandler">LogHandler</a> a => a -> <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></p><div class="doc"><p>Add handler to <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>. Returns a new <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>.</p></div></div><div class="top"><p class="src"><a name="v:removeHandler" class="def">removeHandler</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></p><div class="doc"><p>Remove a handler from the <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>. Handlers are removed in the reverse
|
|
order they were added, so the following property holds for any <code><a href="System-Log-Handler.html#t:LogHandler">LogHandler</a></code>
|
|
<code>h</code>:</p><pre>removeHandler . addHandler h = id</pre><p>If no handlers are associated with the <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>, it is returned unchanged.</p><p>The root logger's default handler that writes every message to stderr can
|
|
be removed by using this function before any handlers have been added
|
|
to the root logger:</p><pre>updateGlobalLogger rootLoggerName removeHandler</pre></div></div><div class="top"><p class="src"><a name="v:setHandlers" class="def">setHandlers</a> :: <a href="System-Log-Handler.html#t:LogHandler">LogHandler</a> a => [a] -> <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></p><div class="doc"><p>Set the 'Logger'\'s list of handlers to the list supplied.
|
|
All existing handlers are removed first.</p></div></div><div class="top"><p class="src"><a name="v:getLevel" class="def">getLevel</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="System-Log-Logger.html#t:Priority">Priority</a></p><div class="doc"><p>Returns the "level" of the logger. Items beneath this
|
|
level will be ignored.</p></div></div><div class="top"><p class="src"><a name="v:setLevel" class="def">setLevel</a> :: <a href="System-Log-Logger.html#t:Priority">Priority</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></p><div class="doc"><p>Sets the "level" of the <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>. Returns a new
|
|
<code><a href="System-Log-Logger.html#t:Logger">Logger</a></code> object with the new level.</p></div></div><div class="top"><p class="src"><a name="v:clearLevel" class="def">clearLevel</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a></p><div class="doc"><p>Clears the "level" of the <code><a href="System-Log-Logger.html#t:Logger">Logger</a></code>. It will now inherit the level of
|
|
| its parent.</p></div></div><h2 id="g:10">Saving Your Changes</h2><div class="doc"><p>These functions commit changes you've made to loggers to the global
|
|
logger hierarchy. </p></div><div class="top"><p class="src"><a name="v:saveGlobalLogger" class="def">saveGlobalLogger</a> :: <a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</p><div class="doc"><p>Updates the global record for the given logger to take into
|
|
account any changes you may have made.</p></div></div><div class="top"><p class="src"><a name="v:updateGlobalLogger" class="def">updateGlobalLogger</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/Data-String.html#t:String">String</a></td><td class="doc"><p>Logger name</p></td></tr><tr><td class="src">-> (<a href="System-Log-Logger.html#t:Logger">Logger</a> -> <a href="System-Log-Logger.html#t:Logger">Logger</a>)</td><td class="doc"><p>Function to call</p></td></tr><tr><td class="src">-> <a href="file:///usr/local/Cellar/ghc/7.10.1/share/doc/ghc/html/libraries/base-4.8.0.0/System-IO.html#t:IO">IO</a> ()</td><td class="doc empty"> </td></tr></table></div><div class="doc"><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 ("s" is a <code><a href="System-Log-Handler.html#t:LogHandler">LogHandler</a></code>):</p><pre>updateGlobalLogger "MyApp.BuggyComponent"
|
|
(setLevel DEBUG . setHandlers [s])</pre></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html> |