source: rtems/doc/new_chapters/eventlog.t @ 571a915

4.104.114.84.95
Last change on this file since 571a915 was a99ea16, checked in by Joel Sherrill <joel.sherrill@…>, on 08/25/98 at 21:02:58

Fixed spelling mistakes.

  • Property mode set to 100644
File size: 25.0 KB
Line 
1@c
2@c  COPYRIGHT (c) 1988-1998.
3@c  On-Line Applications Research Corporation (OAR).
4@c  All rights reserved.
5@c
6@c  $Id$
7@c
8
9@chapter Event Logging Manager
10
11@section Introduction
12
13The event logging manager provides a portable method for logging
14system and application events and subsequent processing of those
15events.  The capabilities in this manager were defined in the POSIX
161003.1h/D3 proposed standard titled @b{Services for Reliable,
17Available, and Serviceable Systems}.
18
19The directives provided by the event logging manager are:
20
21@itemize @bullet
22@item @code{log_write} - Write to the Log
23@item @code{log_open} - Open a log file
24@item @code{log_read} - Read from the system Log
25@item @code{log_notify} - Notify Process of writes to the system log
26@item @code{log_close} - Close log descriptor
27@item @code{log_seek} - Reposition log file offset
28@item @code{log_severity_before} - Compare event record severities
29@item @code{log_facilityemptyset} - Manipulate log facility sets
30@item @code{log_facilityfillset} - Manipulate log facility sets
31@item @code{log_facilityaddset} - Manipulate log facility sets
32@item @code{log_facilitydelset} - Manipulate log facility sets
33@item @code{log_facilityismember} - Manipulate log facility sets
34@end itemize
35
36@section Background
37
38@subsection Log Files and Events
39
40System log
41
42Non-system logs
43
44Events, facility, severity
45
46@subsection Queries
47
48@section Operations
49
50@subsection Creating and Writing a non-System Log
51
52Discuss creating and writing to a non-system log.
53
54@example
55  log_create
56  log_write loop
57@end example
58
59@subsection Reading a Log
60
61Discuss opening and reading from a log.
62
63@example
64  build a query
65  log_open
66  log_read loop
67@end example
68
69@section Directives
70
71This section details the event logging manager's directives.
72A subsection is dedicated to each of this manager's directives
73and describes the calling sequence, related constants, usage,
74and status codes.
75
76@page
77@subsection log_write - Write to the Log
78
79@subheading CALLING SEQUENCE:
80
81@ifset is-C
82@example
83int log_write(
84  const log_facility_t  facility,
85  const int             event_id,
86  const log_severity_t  severity,
87  const void           *buf,
88  const size_t          len
89);
90@end example
91@end ifset
92
93@ifset is-Ada
94@end ifset
95
96@subheading STATUS CODES:
97
98@table @b
99@item EINVAL
100The facility argument is not a valid log_facility.
101
102@item EINVAL
103The severity argument exceeds @code{LOG_SEVERITY_MAX}
104
105@item EINVAL
106The len argument exceeds @code{LOG_ENTRY_MAXLEN}
107
108@item ENOSPC
109The log file has run out of space on the device.
110
111@item EPERM
112The caller does not have appropriate permission for writing to
113the given facility.
114
115@item EIO
116An I/O error occurred in writing to the system event log.
117
118@end table
119
120@subheading DESCRIPTION:
121
122The @code{log_write} function writes an event record, consisting
123of event attributes, and the data identified by the @code{buf}
124argument, to the system log.  The @code{len} argument specifies
125the length in bytes of the buffer pointed to by @code{buf}.  The
126@code{len} argument shall specify the value of the event record
127length attribute.  The value of @code{len} shall be less than or
128equal to @code{LOG_ENTRY_MAXLEN} or the @code{log_write} shall fail.
129
130The @code{event_id} argument identifies the type of event record
131being written.  The @code{event_id} argument shall specify the value
132of the event ID attribute of the event record.
133
134The argument @code{facility} indicates the facility from which the
135event type is drawn.  The @code{facility} argument shall specify the
136value of the event record facility attribute.  The value of the
137@code{facility} argument shall be a valid log facility or the
138@code{log_write} function shall fail.
139
140The @code{severity} argument indicates the severity level of the
141event record.  The @code{severity} argument shall specify the value
142of the event record severity attribute.  The value of the
143@code{severity} argument shall be less than or equal to
144@code{LOG_SEVERITY_MAX} or the @code{log_write} function shall fail. 
145
146The effective_UID of the calling process shall specify the event
147record UID attribute.  The effective-GID of the calling process
148shall specify the event record GID attribute.  The process ID
149of the calling process shall specify the event record process ID
150attribute.  The process group ID of the calling process shall
151specify the event record process group ID attribute.  The current
152value of the system clock shall specify the event record timestamp
153attribute.
154
155@subheading NOTES:
156
157The @code{_POSIX_LOGGING} feature flag is defined to indicate
158this service is available.
159
160@page
161@subsection log_open - Open a log file
162
163@subheading CALLING SEQUENCE:
164
165@ifset is-C
166@example
167int log_open(
168  const logd_t         *logdes,
169  const char           *path,
170  const log_query_t    *query
171);
172@end example
173@end ifset
174
175@ifset is-Ada
176@end ifset
177
178@subheading STATUS CODES:
179
180@table @b
181@item EACCES
182Search permission is denied on a component of the path prefix,
183or the log file exists and read permission is denied.
184
185@item  EINTR
186A signal interrupted the call to log_open().
187
188@item EINVAL
189The log_facility field of the query argument is not a valid
190facility set.
191
192@item EINVAL
193The log_severity field of the query argument exceeds
194@code{LOG_SEVERITY_MAX}.
195
196@item EINVAL
197The path argument referred to a file that was not a log file.
198
199@item EMFILE
200Too many log file descriptors are currently in use by this
201process.
202
203@item ENAMETOOLONG
204The length of the path string exceeds @code{PATH_MAX}, or a pathname
205component is longer than @code{NAME_MAX} while @code{_POSIX_NO_TRUNC} is
206in effect.
207
208@item ENFILE
209Too many files are currently open in the system.
210
211@item ENOENT
212The file specified by the path argument does not exist.
213
214@item ENOTDIR
215A component of the path prefix is not a directory.
216
217@end table
218
219@subheading DESCRIPTION:
220
221The @code{log_open} function establishes the connection between a
222log file and a log file descriptor.  It creates an open log file
223description that refers to a log file and a log file descriptor that
224refers to that open log file description.  The log file descriptor is
225used by other log functions to refer to that log file.  The @code{path}
226argument points to a pathname naming a log file.  A @code{path}
227argument of NULL specifies the current system log file. 
228
229The @code{query} argument points to a log query specification that
230restricts log operations using the returned log file descriptor to
231to event records from the log file which match the query.  The
232predicate which determines the success of the match operation is the
233logical AND of the individual comparison predicates for each member
234of the log query specification.  The query attribute of the open file
235description is set to filter as specified by the @code{query} argument.
236If the value of the query argument is not NULL, the value of the
237@code{log_facility} member of the @code{query} specification shall be
238a set of valid log facilities or the @code{log_open} shall fail.  If
239the value of the @code{query} argument is not NULL, the value of the
240@code{log_severity} member of the @code{query} specification shall be
241less than or equal to @code{LOG_SEVERITY_MAX} or the @code{log_open}
242shall fail.  If the value of the @code{query} argument is NULL, no
243query filter shall be applied.
244
245@subheading NOTES:
246
247The @code{_POSIX_LOGGING} feature flag is defined to indicate
248this service is available.
249
250@page
251@subsection log_read - Read from the system Log
252
253@subheading CALLING SEQUENCE:
254
255@ifset is-C
256@example
257int log_read(
258  const logd_t logdes,
259  struct log_entry *entry,
260  void             *log_buf,
261  const size_t      log_len,
262  const size_t     *log_sizeread
263);
264@end example
265@end ifset
266
267@ifset is-Ada
268@end ifset
269
270@subheading STATUS CODES:
271
272@table @b
273@item EBADF
274The logdes argument is not a valid log file descriptor.
275
276@item EBUSY
277No data available.  The open log file descriptor references
278the current system log.  and there are no unread event records
279remaining.
280
281@item EINTR
282A signal interrupted the call to log_read().
283
284@item EIO
285An I/O error occurred in reading from the event log.
286
287@end table
288
289@subheading DESCRIPTION:
290
291The @code{log_read} function shall attempt to read the @code{log_entry}
292structure and @code{log_len} bytes of data from the next event record
293of the log file associated with the open log file descriptor @code{logdes},
294placing the @code{log_entry} structure into the buffer pointed to by
295@code{entry}, and the data into the buffer pointed to by @code{log_buf}.
296The log record ID of the returned event record shall be stored in the
297@code{log_recid} member of the @code{log_entry} structure for the event
298record.
299
300If the query attribute of the open log file description associated with
301the @code{logdes} is set, the event record read shall match that query.
302If the @code{entry} argument is not NULL it will point to a @code{log_entry}
303structure which shall be filled with the creation information for this log
304entry.  If the argument @code{log_buf} is not NULL the data written with the
305log entry will be placed in the buffer.  The size of the buffer is specified
306by the argument @code{log_len}.
307
308If the @code{log_read} is successful the call shall store the actual length
309of the data associated with the event record into the location specified by
310@code{log_sizeread}.  This number may be smaller or greater than
311@code{log_len}.
312
313@subheading NOTES:
314
315The @code{_POSIX_LOGGING} feature flag is defined to indicate
316this service is available.
317
318@page
319@subsection log_notify - Notify Process of writes to the system log.
320
321@subheading CALLING SEQUENCE:
322
323@ifset is-C
324@example
325int log_notify(
326  const logd_t           logdes,
327  const struct sigevent *notification
328);
329@end example
330@end ifset
331
332@ifset is-Ada
333@end ifset
334
335@subheading STATUS CODES:
336
337@table @b
338@item EBADF
339The logdes argument is not a valid log file descriptor.
340
341@item EINVAL
342The notification argument specifies an invalid signal.
343
344@item EINVAL
345The process has requested a notify on a log that will not be
346written to.
347
348@item ENOSY
349The function log_notify() is not supported by this implementation.
350
351@end table
352
353@subheading DESCRIPTION:
354
355If the argument @code{notification} is not NULL this function registers
356the calling process to be notified of event records received by the system
357log, which match the query parameters associated with the open log descriptor
358specified by @code{logdes}.  The notification specified by the
359@code{notification} argument shall be sent to the process when an event
360record received by the system log is matched by the query attribute of the
361open log file description associated with the @code{logdes} log file
362descriptor.  If the calling process has already registered a notification
363for the @code{logdes} log file descriptor, the new notification shall
364replace the existing notification registration.
365
366If the @code{notification} argument is NULL and the calling process is
367currently registered to be notified for the @code{logdes} log file
368descriptor, the existing registration shall be removed.
369
370@subheading NOTES:
371
372The @code{_POSIX_LOGGING} feature flag is defined to indicate
373this service is available.
374
375@page
376@subsection log_close - Close log descriptor
377
378@subheading CALLING SEQUENCE:
379
380@ifset is-C
381@example
382int log_close(
383  const logd_t   logdes
384);
385@end example
386@end ifset
387
388@ifset is-Ada
389@end ifset
390
391@subheading STATUS CODES:
392
393@table @b
394@item EBADF
395The logdes argument is not a valid log file descriptor.
396
397@end table
398
399@subheading DESCRIPTION:
400
401The @code{log_close} function deallocates the open log file descriptor
402indicated by @code{log_des}.
403
404When all log file descriptors associated with an open log file description
405have been closed, the open log file description shall be freed.
406
407If the link count of the log file is zero, when all log file descriptors
408have been closed, the space occupied by the log file shall be freed and the
409log file shall no longer be accessible.
410
411If the process has successfully registered a notification request for the
412log file descriptor, the registration shall be removed.
413
414@subheading NOTES:
415
416The @code{_POSIX_LOGGING} feature flag is defined to indicate
417this service is available.
418
419@page
420@subsection log_seek - Reposition log file offset
421
422@subheading CALLING SEQUENCE:
423
424@ifset is-C
425@example
426int log_seek(
427  const logd_t    logdes,
428  log_recid_t     log_recid
429);
430@end example
431@end ifset
432
433@ifset is-Ada
434@end ifset
435
436@subheading STATUS CODES:
437
438@table @b
439@item EBADF
440The logdes argument is not a valid log file descriptor.
441
442@item EINTR
443The log_seek() function was interrupted by a signal.
444
445@item EINVAL
446The log_recid argument is not a valid record id.
447
448@end table
449
450@subheading DESCRIPTION:
451
452The @code{log_seek} function shall set the log file offset of the open
453log description associated with the @code{logdes} log file descriptor
454to the event record in the log file identified by @code{log_recid}. 
455The @code{log_recid} argument is either the record id of a valid event
456record or one of the following values, as defined in the header <evlog.h>:
457
458@table @b
459@item LOG_SEEK_START
460Set log file position to point at the first event
461record in the log file
462
463@item LOG_SEEK_END
464Set log file position to point after the last event
465record in the log file
466
467@end table
468
469If the @code{log_seek} function is interrupted, the state of the open log
470file description associated with @code{logdes} is unspecified.
471
472@subheading NOTES:
473
474The @code{_POSIX_LOGGING} feature flag is defined to indicate
475this service is available.
476
477@page
478@subsection log_severity_before - Compare event record severities
479
480@subheading CALLING SEQUENCE:
481
482@ifset is-C
483@example
484int log_severity_before(
485  log_severity_t  s1,
486  log_severity_t  s2
487);
488@end example
489@end ifset
490
491@ifset is-Ada
492@end ifset
493
494@subheading STATUS CODES:
495
496@table @b
497@item EINVAL
498The value of either s1 or s2 exceeds @code{LOG_SEVERITY_MAX}.
499
500@end table
501
502@subheading DESCRIPTION:
503
504The @code{log_severity_before} function shall compare the severity order
505of the @code{s1} and @code{s2} arguments.  Severity values ordered
506according to this function shall be according to decreasing severity.
507
508If @code{s1} is ordered before or is equal to @code{s2} then the ordering
509predicate shall return 1, otherwise the predicate shall return 0.  If
510either @code{s1} or @code{s2} specify invalid severity values, the return
511value of @code{log_severity_before} is unspecified.
512
513@subheading NOTES:
514
515The @code{_POSIX_LOGGING} feature flag is defined to indicate
516this service is available.
517
518@page
519@subsection log_facilityemptyset - Manipulate log facility sets
520
521@subheading CALLING SEQUENCE:
522
523@ifset is-C
524@example
525int log_facilityemptyset(
526  log_facility_set_t  *set
527);
528@end example
529@end ifset
530
531@ifset is-Ada
532@end ifset
533
534@subheading STATUS CODES:
535
536@table @b
537@item EINVAL
538The facilityno argument is not a valid facility.
539
540@end table
541
542@subheading DESCRIPTION:
543
544The facilitysetops primitives manipulate sets of facilities.  They
545operate on data objects addressable by the application.
546
547The @code{log_facilityemptyset} function initializes the facility
548set pointed to by the argument @code{set}, such that all facilities
549are included.
550
551Applications shall call either @code{log_facilityemptyset} or
552@code{log_facilityfillset} at least once for each object of type
553@code{log_facilityset_t} prior to any other use of that object.  If
554such an object is not initialized in this way, but is nonetheless
555supplied as an argument  to any of the @code{log_facilityaddset},
556@code{logfacilitydelset}, @code{log_facilityismember} or
557@code{log_open} functions, the results are undefined.
558
559The @code{log_facilityaddset} and @code{log_facilitydelset} functions
560respectively add or delete the individual facility specified by the
561value of the argument @code{facilityno} to or from the facility set
562pointed to by the argument @code{set}
563
564The @code{log_facilityismember} function tests whether the facility
565specified by the value of the argument @code{facilityno} is a member
566of the set pointed to by the argument @code{set}.  Upon successful
567completion, the @code{log_facilityismember} function either returns
568a value of one to the location specified by @code{member} if the
569specified facility is a member of the specified set or returns a
570value of zero to the location specified by @code{member} if the
571specified facility is not a member of the specified set.
572
573@subheading NOTES:
574
575The @code{_POSIX_LOGGING} feature flag is defined to indicate
576this service is available.
577
578@page
579@subsection log_facilityfillset - Manipulate log facility sets
580
581@subheading CALLING SEQUENCE:
582
583@ifset is-C
584@example
585int log_facilityfillset(
586  log_facility_set_t  *set
587);
588@end example
589@end ifset
590
591@ifset is-Ada
592@end ifset
593
594@subheading STATUS CODES:
595
596@table @b
597@item EINVAL
598The facilityno argument is not a valid facility.
599
600@end table
601
602@subheading DESCRIPTION:
603
604The facilitysetops primitives manipulate sets of facilities.  They
605operate on data objects addressable by the application.
606
607The @code{log_facilityemptyset} function initializes the facility
608set pointed to by the argument @code{set}, such that all facilities
609are included.
610
611Applications shall call either @code{log_facilityemptyset} or
612@code{log_facilityfillset} at least once for each object of type
613@code{log_facilityset_t} prior to any other use of that object.  If
614such an object is not initialized in this way, but is nonetheless
615supplied as an argument  to any of the @code{log_facilityaddset},
616@code{logfacilitydelset}, @code{log_facilityismember} or
617@code{log_open} functions, the results are undefined.
618
619The @code{log_facilityaddset} and @code{log_facilitydelset} functions
620respectively add or delete the individual facility specified by the
621value of the argument @code{facilityno} to or from the facility set
622pointed to by the argument @code{set}
623
624The @code{log_facilityismember} function tests whether the facility
625specified by the value of the argument @code{facilityno} is a member
626of the set pointed to by the argument @code{set}.  Upon successful
627completion, the @code{log_facilityismember} function either returns
628a value of one to the location specified by @code{member} if the
629specified facility is a member of the specified set or returns a
630value of zero to the location specified by @code{member} if the
631specified facility is not a member of the specified set.
632
633@subheading NOTES:
634
635The @code{_POSIX_LOGGING} feature flag is defined to indicate
636this service is available.
637
638@page
639@subsection log_facilityaddset - Manipulate log facility sets
640
641@subheading CALLING SEQUENCE:
642
643@ifset is-C
644@example
645int log_facilityaddset(
646  log_facility_set_t  *set,
647  log_facility_t      facilityno
648);
649@end example
650@end ifset
651
652@ifset is-Ada
653@end ifset
654
655@subheading STATUS CODES:
656
657@table @b
658@item EINVAL
659The facilityno argument is not a valid facility.
660
661@end table
662
663@subheading DESCRIPTION:
664
665The facilitysetops primitives manipulate sets of facilities.  They
666operate on data objects addressable by the application.
667
668The @code{log_facilityemptyset} function initializes the facility
669set pointed to by the argument @code{set}, such that all facilities
670are included.
671
672Applications shall call either @code{log_facilityemptyset} or
673@code{log_facilityfillset} at least once for each object of type
674@code{log_facilityset_t} prior to any other use of that object.  If
675such an object is not initialized in this way, but is nonetheless
676supplied as an argument  to any of the @code{log_facilityaddset},
677@code{logfacilitydelset}, @code{log_facilityismember} or
678@code{log_open} functions, the results are undefined.
679
680The @code{log_facilityaddset} and @code{log_facilitydelset} functions
681respectively add or delete the individual facility specified by the
682value of the argument @code{facilityno} to or from the facility set
683pointed to by the argument @code{set}
684
685The @code{log_facilityismember} function tests whether the facility
686specified by the value of the argument @code{facilityno} is a member
687of the set pointed to by the argument @code{set}.  Upon successful
688completion, the @code{log_facilityismember} function either returns
689a value of one to the location specified by @code{member} if the
690specified facility is a member of the specified set or returns a
691value of zero to the location specified by @code{member} if the
692specified facility is not a member of the specified set.
693
694@subheading NOTES:
695
696The @code{_POSIX_LOGGING} feature flag is defined to indicate
697this service is available.
698
699@page
700@subsection log_facilitydelset - Manipulate log facility sets
701
702@subheading CALLING SEQUENCE:
703
704@ifset is-C
705@example
706int log_facilitydelset(
707  log_facility_set_t  *set,
708  log_facility_t      facilityno
709);
710@end example
711@end ifset
712
713@ifset is-Ada
714@end ifset
715
716@subheading STATUS CODES:
717
718@table @b
719@item EINVAL
720The facilityno argument is not a valid facility.
721
722@end table
723
724@subheading DESCRIPTION:
725
726The facilitysetops primitives manipulate sets of facilities.  They
727operate on data objects addressable by the application.
728
729The @code{log_facilityemptyset} function initializes the facility
730set pointed to by the argument @code{set}, such that all facilities
731are included.
732
733Applications shall call either @code{log_facilityemptyset} or
734@code{log_facilityfillset} at least once for each object of type
735@code{log_facilityset_t} prior to any other use of that object.  If
736such an object is not initialized in this way, but is nonetheless
737supplied as an argument  to any of the @code{log_facilityaddset},
738@code{logfacilitydelset}, @code{log_facilityismember} or
739@code{log_open} functions, the results are undefined.
740
741The @code{log_facilityaddset} and @code{log_facilitydelset} functions
742respectively add or delete the individual facility specified by the
743value of the argument @code{facilityno} to or from the facility set
744pointed to by the argument @code{set}
745
746The @code{log_facilityismember} function tests whether the facility
747specified by the value of the argument @code{facilityno} is a member
748of the set pointed to by the argument @code{set}.  Upon successful
749completion, the @code{log_facilityismember} function either returns
750a value of one to the location specified by @code{member} if the
751specified facility is a member of the specified set or returns a
752value of zero to the location specified by @code{member} if the
753specified facility is not a member of the specified set.
754
755@subheading NOTES:
756
757The @code{_POSIX_LOGGING} feature flag is defined to indicate
758this service is available.
759
760@page
761@subsection log_facilityismember - Manipulate log facility sets
762
763@subheading CALLING SEQUENCE:
764
765@ifset is-C
766@example
767int log_facilityismember(
768  const log_facility_set_t *set,
769  log_facility_t            facilityno,
770  const int                *member
771);
772@end example
773@end ifset
774
775@ifset is-Ada
776@end ifset
777
778@subheading STATUS CODES:
779
780@table @b
781@item EINVAL
782The facilityno argument is not a valid facility.
783
784@end table
785
786@subheading DESCRIPTION:
787
788The facilitysetops primitives manipulate sets of facilities.  They
789operate on data objects addressable by the application.
790
791The @code{log_facilityemptyset} function initializes the facility
792set pointed to by the argument @code{set}, such that all facilities
793are included.
794
795Applications shall call either @code{log_facilityemptyset} or
796@code{log_facilityfillset} at least once for each object of type
797@code{log_facilityset_t} prior to any other use of that object.  If
798such an object is not initialized in this way, but is nonetheless
799supplied as an argument  to any of the @code{log_facilityaddset},
800@code{logfacilitydelset}, @code{log_facilityismember} or
801@code{log_open} functions, the results are undefined.
802
803The @code{log_facilityaddset} and @code{log_facilitydelset} functions
804respectively add or delete the individual facility specified by the
805value of the argument @code{facilityno} to or from the facility set
806pointed to by the argument @code{set}
807
808The @code{log_facilityismember} function tests whether the facility
809specified by the value of the argument @code{facilityno} is a member
810of the set pointed to by the argument @code{set}.  Upon successful
811completion, the @code{log_facilityismember} function either returns
812a value of one to the location specified by @code{member} if the
813specified facility is a member of the specified set or returns a
814value of zero to the location specified by @code{member} if the
815specified facility is not a member of the specified set.
816
817@subheading NOTES:
818
819The @code{_POSIX_LOGGING} feature flag is defined to indicate
820this service is available.
821
822@page
823@subsection log_create - Creates a log file
824
825@subheading CALLING SEQUENCE:
826
827@ifset is-C
828@example
829int log_create(
830  logd_t       *ld,
831  const char   *path,
832);
833@end example
834@end ifset
835
836@ifset is-Ada
837@end ifset
838
839@subheading STATUS CODES:
840
841@table @b
842@item ENOMEM
843The is ????????????
844
845@end table
846
847@subheading DESCRIPTION:
848
849This function dynamically allocates memory for the @code{ld}, associates
850a directory path to the @code{Ld}, and provides access permissions to the
851@code{ld}.
852
853@subheading NOTES:
854
855The @code{_POSIX_LOGGING} feature flag is defined to indicate
856this service is available.
857
858@page
859@subsection log_sys_create - Creates a system log file
860
861@subheading CALLING SEQUENCE:
862
863@ifset is-C
864@example
865int log_sys_create();
866@end example
867@end ifset
868
869@ifset is-Ada
870@end ifset
871
872@subheading STATUS CODES:
873
874@table @b
875@item EEXIST
876The directory path to the system log already exist.
877
878@end table
879
880@subheading DESCRIPTION:
881
882This function will create a predefined system log directory path and
883system log file if they do not already exist.
884
885@subheading NOTES:
886
887The @code{_POSIX_LOGGING} feature flag is defined to indicate
888this service is available.
Note: See TracBrowser for help on using the repository browser.