• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /****************************************************************************
2   * include/syslog.h
3   *
4   * Licensed to the Apache Software Foundation (ASF) under one or more
5   * contributor license agreements.  See the NOTICE file distributed with
6   * this work for additional information regarding copyright ownership.  The
7   * ASF licenses this file to you under the Apache License, Version 2.0 (the
8   * "License"); you may not use this file except in compliance with the
9   * License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
16   * License for the specific language governing permissions and limitations
17   * under the License.
18   *
19   ****************************************************************************/
20  
21  #ifndef __INCLUDE_SYSLOG_H
22  #define __INCLUDE_SYSLOG_H
23  
24  /****************************************************************************
25   * Included Files
26   ****************************************************************************/
27  
28  #include "vfs_config.h"
29  
30  #include "stdint.h"
31  #include "stdarg.h"
32  
33  #ifdef __cplusplus
34  #if __cplusplus
35  extern "C"{
36  #endif
37  #endif /* __cplusplus */
38  
39  /****************************************************************************
40   * Pre-processor Definitions
41   ****************************************************************************/
42  /* The option argument to openlog() is an OR of any of these:
43   *
44   *   LOG_CONS     - Write directly to system console if there is an error
45   *                  while sending to system logger.
46   *   LOG_NDELAY   - Open the connection immediately (normally, the connection
47   *                  is opened when the first message is logged).
48   *   LOG_NOWAIT   - Don't wait for child processes that may have been created
49   *                  while logging the message.
50   *   LOG_ODELAY   - The converse of LOG_NDELAY; opening of the connection is
51   *                  delayed until syslog() is called. (This is the default,
52   *                  and need not be specified.)
53   *   LOG_PERROR   - (Not in POSIX.1-2001 or POSIX.1-2008.) Print to stderr
54   *                  as well (Linux).
55   *   LOG_PID      - Include PID with each message.
56   */
57  
58  /* Note: openlog() is not currently supported */
59  
60  /* The facility argument is used to specify what type of program is logging
61   * the message. This lets the configuration file specify that messages from
62   * different facilities will be handled differently.
63   *
64   *   LOG_AUTH     - Security/authorization messages
65   *   LOG_AUTHPRIV - Security/authorization messages (private)
66   *   LOG_CRON     - Clock daemon (cron and at)
67   *   LOG_DAEMON   - System daemons without separate facility value
68   *   LOG_FTP      - FTP daemon
69   *   LOG_KERN     - Kernel messages (these can't be generated from user
70   *                  processes)
71   *   LOG_LOCAL0 through LOG_LOCAL7 - Reserved for local use
72   *   LOG_LPR      - Line printer subsystem
73   *   LOG_MAIL     - Mail subsystem
74   *   LOG_NEWS     - USENET news subsystem
75   *   LOG_SYSLOG   - Messages generated internally by syslogd(8)
76   *   LOG_USER     - Generic user-level messages (default)
77   *   LOG_UUCP     - UUCP subsystem
78   */
79  
80  #define LOG_AUTH      0
81  #define LOG_AUTHPRIV  0
82  #define LOG_CRON      0
83  #define LOG_DAEMON    0
84  #define LOG_FTP       0
85  #define LOG_KERN      0
86  #define LOG_LOCAL0    0
87  #define LOG_LOCAL1    0
88  #define LOG_LOCAL2    0
89  #define LOG_LOCAL3    0
90  #define LOG_LOCAL4    0
91  #define LOG_LOCAL5    0
92  #define LOG_LOCAL6    0
93  #define LOG_LOCAL7    0
94  #define LOG_LPR       0
95  #define LOG_MAIL      0
96  #define LOG_NEWS      0
97  #define LOG_SYSLOG    0
98  #define LOG_USER      0
99  #define LOG_UUCP      0
100  
101  /* This determines the importance of the message. The levels are, in order
102   * of decreasing importance:
103   */
104  
105  #define LOG_EMERG     0  /* System is unusable */
106  #define LOG_ALERT     1  /* Action must be taken immediately */
107  #define LOG_CRIT      2  /* Critical conditions */
108  #define LOG_ERR       3  /* Error conditions */
109  #define LOG_WARNING   4  /* Warning conditions */
110  #define LOG_NOTICE    5  /* Normal, but significant, condition */
111  #define LOG_INFO      6  /* Informational message */
112  #define LOG_DEBUG     7  /* Debug-level message */
113  
114  /* Used with setlogmask() */
115  
116  #define LOG_MASK(p)   (1 << (p))
117  #define LOG_UPTO(p)   ((1 << (p)) - 1)
118  #define LOG_ALL       0xff
119  
120  /****************************************************************************
121   * Public Function Prototypes
122   ****************************************************************************/
123  
124  #if defined(CONFIG_SYSLOG_CHAR) && !defined(CONFIG_SYSLOG_DEVPATH)
125  #  define CONFIG_SYSLOG_DEVPATH "/dev/ttyS1"
126  #endif
127  
128  /****************************************************************************
129   * Name: openlog
130   *
131   * Description:
132   *   The openlog() function sets process attributes that affect subsequent
133   *   calls to syslog(). The ident argument is a string that is prepended to
134   *   every message. The logopt argument indicates logging options. Values
135   *   for logopt are constructed by a bitwise-inclusive OR of zero or more of
136   *   the following:
137   *
138   *     LOG_PID - Log the process ID with each message. This is useful for
139   *       identifying specific processes.
140   *
141   *     LOG_CONS - Write messages to the system console if they cannot be
142   *       sent to the logging facility. The syslog() function ensures that
143   *       the process does not acquire the console as a controlling terminal
144   *       in the process of writing the message.
145   *
146   *     LOG_NDELAY - Open the connection to the logging facility immediately.
147   *       Normally the open is delayed until the first message is logged.
148   *       This is useful for programs that need to manage the order in which
149   *       file descriptors are allocated.
150   *
151   *     LOG_ODELAY - Delay open until syslog() is called.
152   *
153   *     LOG_NOWAIT - Do not wait for child processes that may have been
154   *       created during the course of logging the message. This option
155   *       should be used by processes that enable notification of child
156   *       termination using SIGCHLD, since syslog() may otherwise block
157   *       waiting for a child whose exit status has already been collected.
158   *
159   *   The facility argument encodes a default facility to be assigned to all
160   *   messages that do not have an explicit facility already encoded. The
161   *   initial default facility is LOG_USER.
162   *
163   *   It is not necessary to call openlog() prior to calling syslog().
164   *
165   ****************************************************************************/
166  
167  #if 0 /* Not supported */
168  void openlog(FAR const char *ident, int option, int facility);
169  #endif
170  
171  /****************************************************************************
172   * Name: closelog
173   *
174   * Description:
175   *   The openlog() and syslog() functions may allocate a file descriptor.
176   *   The closelog() function will close any open file descriptors allocated
177   *   by previous calls to openlog() or syslog().
178   *
179   ****************************************************************************/
180  
181  #if 0 /* Not supported */
182  void closelog(void);
183  #endif
184  
185  /****************************************************************************
186   * Name: syslog and vsyslog
187   *
188   * Description:
189   *   syslog() generates a log message. The priority argument is formed by
190   *   ORing the facility and the level values (see include/syslog.h). The
191   *   remaining arguments are a format, as in printf and any arguments to the
192   *   format.
193   *
194   *   The NuttX implementation does not support any special formatting
195   *   characters beyond those supported by printf.
196   *
197   *   The function vsyslog() performs the same task as syslog() with the
198   *   difference that it takes a set of arguments which have been obtained
199   *   using the stdarg variable argument list macros.
200   *
201   ****************************************************************************/
202  
203  int syslog(int priority, const char *format, ...);
204  int vsyslog(int priority, const char *src, va_list ap);
205  
206  /****************************************************************************
207   * Name: lowsyslog and lowvsyslog
208   *
209   * Description:
210   *   syslog() generates a log message. The priority argument is formed by
211   *   ORing the facility and the level values (see include/syslog.h). The
212   *   remaining arguments are a format, as in printf and any arguments to the
213   *   format.
214   *
215   *   This is a non-standard, low-level system logging interface.  The
216   *   difference between syslog() and lowsyslog() is that the syslog()
217   *   interface writes to the syslog device (usually fd=1, stdout) whereas
218   *   lowsyslog() uses a lower level interface that works even from interrupt
219   *   handlers.
220   *
221   *   If the platform cannot support lowsyslog, then we will substitute the
222   *   standard syslogging functions.  These will, however, probably cause
223   *   problems if called from interrupt handlers, depending upon the nature of
224   *   the underlying syslog device.
225   *
226   *   The function lowvsyslog() performs the same task as lowsyslog() with
227   *   the difference that it takes a set of arguments which have been
228   *   obtained using the stdarg variable argument list macros.
229   *
230   ****************************************************************************/
231  
232  #ifdef CONFIG_ARCH_LOWPUTC
233  
234  int lowsyslog(int priority, FAR const char *format, ...);
235  int lowvsyslog(int priority, FAR const char *format, va_list ap);
236  
237  #else
238  
239  #  ifdef CONFIG_CPP_HAVE_VARARGS
240  #    define lowsyslog(p,f,...) syslog(p,f,##__VA_ARGS__)
241  #  else
242  #    define lowsyslog (void)
243  #  endif
244  #  define lowvsyslog(p,f,a) vsyslog(p,f,a)
245  
246  #endif
247  
248  /****************************************************************************
249   * Name: setlogmask
250   *
251   * Description:
252   *   The setlogmask() function sets the logmask and returns the previous
253   *   mask. If the mask argument is 0, the current logmask is not modified.
254   *
255   *   The SYSLOG priorities are: LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR,
256   *   LOG_WARNING, LOG_NOTICE, LOG_INFO, and LOG_DEBUG.  The bit corresponding
257   *   to a priority p is LOG_MASK(p); LOG_UPTO(p) provides the mask of all
258   *   priorities in the above list up to and including p.
259   *
260   *   Per OpenGroup.org "If the maskpri argument is 0, the current log mask
261   *   is not modified."  In this implementation, the value zero is permitted
262   *   in order to disable all syslog levels.
263   *
264   *   NOTE:  setlogmask is not a thread-safe, re-entrant function.  Concurrent
265   *   use of setlogmask() will have undefined behavior.
266   *
267   *   REVISIT: Per POSIX the syslog mask should be a per-process value but in
268   *   NuttX, the scope of the mask is dependent on the nature of the build:
269   *
270   *   Flat Build:  There is one, global SYSLOG mask that controls all output.
271   *   Protected Build:  There are two SYSLOG masks.  One within the kernel
272   *     that controls only kernel output.  And one in user-space that controls
273   *     only user SYSLOG output.
274   *   Kernel Build:  The kernel build is compliant with the POSIX requirement:
275   *     There will be one mask for for each user process, controlling the
276   *     SYSLOG output only form that process.  There will be a separate mask
277   *     accessible only in the kernel code to control kernel SYSLOG output.
278   *
279   ****************************************************************************/
280  
281  int setlogmask(int mask);
282  
283  #ifdef __cplusplus
284  #if __cplusplus
285  }
286  #endif
287  #endif /* __cplusplus */
288  
289  #endif /* __INCLUDE_SYSLOG_H */
290