Import Upstream version 20180207
[hcoop/debian/mlton.git] / basis-library / mlton / syslog.sml
1 (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
2 * Jagannathan, and Stephen Weeks.
3 * Copyright (C) 1997-2000 NEC Research Institute.
4 *
5 * MLton is released under a BSD-style license.
6 * See the file MLton-LICENSE for details.
7 *)
8
9 (* From Tom 7 <twm@andrew.cmu.edu>. *)
10 (* Implementation of the SYSLOG interface using MLton FFI.
11 * This will only work in MLton.
12 *)
13
14 structure MLtonSyslog :> MLTON_SYSLOG =
15 struct
16
17 open PrimitiveFFI.MLton.Syslog
18
19 type openflag = C_Int.t
20
21 local
22 open Logopt
23 in
24 val CONS = LOG_CONS
25 val NDELAY = LOG_NDELAY
26 val NOWAIT = LOG_NOWAIT
27 val ODELAY = LOG_ODELAY
28 (* NOT STANDARD *)
29 val PERROR = LOG_PERROR
30 (* *)
31 val PID = LOG_PID
32 end
33
34 type facility = C_Int.t
35
36 local
37 open Facility
38 in
39 val AUTHPRIV = LOG_AUTH
40 val CRON = LOG_CRON
41 val DAEMON = LOG_DAEMON
42 val KERN = LOG_KERN
43 val LOCAL0 = LOG_LOCAL0
44 val LOCAL1 = LOG_LOCAL1
45 val LOCAL2 = LOG_LOCAL2
46 val LOCAL3 = LOG_LOCAL3
47 val LOCAL4 = LOG_LOCAL4
48 val LOCAL5 = LOG_LOCAL5
49 val LOCAL6 = LOG_LOCAL6
50 val LOCAL7 = LOG_LOCAL7
51 val LPR = LOG_LPR
52 val MAIL = LOG_MAIL
53 val NEWS = LOG_NEWS
54 (* NOT STANDARD *)
55 val SYSLOG = LOG_SYSLOG
56 (* *)
57 val USER = LOG_USER
58 val UUCP = LOG_UUCP
59 end
60
61 type loglevel = C_Int.t
62
63 local
64 open Severity
65 in
66 val ALERT = LOG_ALERT
67 val CRIT = LOG_CRIT
68 val DEBUG = LOG_DEBUG
69 val EMERG = LOG_EMERG
70 val ERR = LOG_ERR
71 val INFO = LOG_INFO
72 val NOTICE = LOG_NOTICE
73 val WARNING = LOG_WARNING
74 end
75
76 val openlog = fn (s, opt, fac) =>
77 let
78 val optf = foldl C_Int.orb 0 opt
79 in
80 openlog (NullString.nullTerm s, optf, fac)
81 end
82
83 val closelog = fn () =>
84 closelog ()
85
86 val log = fn (lev, msg) =>
87 syslog (lev, NullString.nullTerm msg)
88
89 end