Maintainer | simons@cryp.to |
---|---|
Stability | provisional |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
A Haskell interface to syslog(3)
as specified in
POSIX.1-2008.
The entire public API lives in this module. There is a set of exposed
modules available underneath this one, which contain various implementation
details that may be useful to other developers who want to implement
syslog-related functionality. Users of syslog, however, do not need those
modules; System.Posix.Syslog has all you'll need.
Check out the example program that demonstrates how to use this library.
Writing Log Messages
:: Maybe Facility | Categorize this message as belonging into the
given system facility. If left unspecified, the
process-wide default will be used, which tends to
be |
-> Priority | Log with the specified priority. |
-> CStringLen | The actual log message. The string does not need
to be terminated by a |
-> IO () |
Log the given text message via syslog(3)
. Please note that log messages
are committed to the log verbatim --- printf()
-style text formatting
features offered by the underlying system function are not available. If
your log message reads "%s"
, then that string is exactly what will be
written to the log. Also, log messages cannot contain \0
bytes. If they
do, all content following that byte will be cut off because the C function
assumes that the string ends there.
The Haskell String
type can be easily logged with withCStringLen
:
withCStringLen "Hello, world." $ syslog (Just User) Info
ByteStrings
can be logged in the same way with the unsafeUseAsCStringLen
function from Data.ByteString.Unsafe
, which extracts a CStringLen
from
the ByteString
in constant time (no copying!).
Log messages are prioritized with one of the following levels:
>>>
[minBound..maxBound] :: [Priority]
[Emergency,Alert,Critical,Error,Warning,Notice,Info,Debug]
The Ord
instance for Priority
considers the more urgent level lower than
less urgent ones:
>>>
Emergency < Debug
True>>>
minimum [minBound..maxBound] :: Priority
Emergency>>>
maximum [minBound..maxBound] :: Priority
Debug
Syslog distinguishes various system facilities. Most applications should
log in USER
.
Kernel | kernel messages |
User | user-level messages (default unless set otherwise) |
mail system | |
News | network news subsystem |
UUCP | UUCP subsystem |
Daemon | system daemons |
Auth | security and authorization messages |
Cron | clock daemon |
LPR | line printer subsystem |
Local0 | reserved for local use |
Local1 | reserved for local use |
Local2 | reserved for local use |
Local3 | reserved for local use |
Local4 | reserved for local use |
Local5 | reserved for local use |
Local6 | reserved for local use |
Local7 | reserved for local use |
Configuring the system's logging engine
:: CString | An identifier to prepend to all log messages,
typically the name of the programm. Note that the
memory that contains this name must remain valid
until the pointer provided here is released by
calling |
-> [Option] | A set of options that configure the behavior of the system's syslog engine. |
-> Facility | The facility to use by default when none has been
specified with a |
-> IO () |
This function configures the process-wide hidden state of the system's
syslog engine. It's probably a bad idea to call this function anywhere
except at the very top of your program's main
function. And even then you
should probably prefer withSyslog
instead, which guarantees that syslog is
properly initialized within its scope.
withSyslog :: String -> [Option] -> Facility -> IO a -> IO a Source #
Run the given IO a
computation within an initialized syslogging scope.
The definition is:
withSyslog ident opts facil f =withCString
ident $ ptr ->bracket_
(openlog ptr opts facil) closelog f
setlogmask :: [Priority] -> IO [Priority] Source #
Configure a process-wide filter that determines which logging priorities
are ignored and which ones are forwarded to the syslog
implementation. For
example, use setlogmask [Emergency .. Info]
to filter out all debug-level
messages from the message stream. Calling setlogmask [minBound..maxBound]
enables everything. The special case setlogmask []
does nothing, i.e.
the current filter configuration is not modified. This can be used to
retrieve the current configuration.
The function openlog
allows one to configure a handful of process-wide
options that modify the bahavior of the syslog
funcion. These options are
pid
, cons
, odelay
, and ndelay
.
LogPID | Log the pid with each message. |
Console | Log on the console if errors occur while sending messages. |
DelayedOpen | Delay all initialization until first |
ImmediateOpen | Initalize the syslog system immediately. |
DontWaitForChildren | The syslog system should not attempt to wait for child
process it may have created. This option is required by
applications who enable |