HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulehsyslog-5.0.2Haskell2010

System.Posix.Syslog

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.

  • 3 types
  • 5 values
  • Packagehsyslog-5.0.2
  • Exports8
  • LanguageHaskell2010
  • LicenceBSD-3-Clause
  • SourceSyslog.hs

Writing Log Messages

3 declarations
valuesyslog
  1. :: 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 User by default.

  2. -> Priority

    Log with the specified priority.

  3. -> CStringLen

    The actual log message. The string does not need to be terminated by a \0 byte. If the string does contain a \0 byte, then the message ends there regardless of what the length argument says.

  4. -> 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!).

datadata Priority
#

Log messages are prioritized with one of the following levels:

Example1 expression
[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:

Example3 expressions
Emergency < DebugTrueminimum [minBound..maxBound] :: PriorityEmergencymaximum [minBound..maxBound] :: PriorityDebug

Constructors

Instances8Bounded, Enum, Eq, Ord, Read, Show, …
datadata Facility
#

Syslog distinguishes various system facilities. Most applications should log in USER.

Constructors

  • Kernel

    kernel messages

  • User

    user-level messages (default unless set otherwise)

  • Mail

    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

Instances7Bounded, Enum, Eq, Read, Show, Generic, …

Configuring the system's logging engine

5 declarations
valueopenlog
  1. :: CString

    An identifier to prepend to all log messages, typically the name of the program. Note that the memory that contains this name must remain valid until the pointer provided here is released by calling closelog.

  2. -> [Option]

    A set of options that configure the behavior of the system's syslog engine.

  3. -> Facility

    The facility to use by default when none has been specified with a syslog call.

  4. -> 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.

valuecloselog :: IO ()
#

Release all syslog-related resources.

valuesetlogmask :: [Priority] -> IO [Priority]
#

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.

datadata Option
#

The function openlog allows one to configure a handful of process-wide options that modify the behavior of the syslog function. These options are pid, cons, odelay, and ndelay.

Constructors

  • LogPID

    Log the pid with each message.

  • Console

    Log on the console if errors occur while sending messages.

  • DelayedOpen

    Delay all initialization until first syslog() call (default).

  • ImmediateOpen

    Initialize 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 SIGCHLD themselves.

Instances7Bounded, Enum, Eq, Read, Show, Generic, …