1 .\"Copyright (c) 2004-2011 Apple Inc. All rights reserved.
3 .\"@APPLE_LICENSE_HEADER_START@
5 .\"This file contains Original Code and/or Modifications of Original Code
6 .\"as defined in and that are subject to the Apple Public Source License
7 .\"Version 2.0 (the 'License'). You may not use this file except in
8 .\"compliance with the License. Please obtain a copy of the License at
9 .\"http://www.opensource.apple.com/apsl/ and read it before using this
12 .\"The Original Code and all software distributed under the License are
13 .\"distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 .\"EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 .\"INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 .\"FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
17 .\"Please see the License for the specific language governing rights and
18 .\"limitations under the License.
20 .\"@APPLE_LICENSE_HEADER_END@
27 .Nd configuration file for
34 server reads the /etc/asl.conf file at startup, and re-reads the file when it receives a HUP signal.
37 daemon reads the file when it starts.
38 See the ASLMANAGER PARAMETER SETTINGS section for details on aslmanager-specific parameters.
40 If the /etc/asl directory exists, then
44 will read each file it contains.
45 These files must have the same format as
47 Each file configures an independent module, identified by the file name.
48 Modules may be enabled or disabled independently.
49 Each module may specify its own set of rules for acting on received messages.
50 See the ASL MODULES section for details.
52 The files contains four types of lines.
53 Each type is identified by the first non-whitespace character.
55 .Bl -tag -width "=" -compact
61 Output file or directory configuration options
66 Parameter setting lines in the configuration file are generally of the form:
68 .Dl = parameter_name value ...
70 Most parameter settings require a single value, although some may take several values.
71 See the PARAMETER SETTINGS section for details.
73 Query-action rules in the file generally have the form:
75 .Dl ? query action ...
79 to perform the specified action when a received message matches the given query.
80 Actions may be followed by optional arguments.
81 See the QUERY-ACTION RULES section for details.
83 Most query-action rules specify output files or ASL-format data stores where matching messages should be saved.
84 The optional parameters for those rules can specify a number of options for these outputs.
85 As a convenience, these configuration options may be specified on a separate line.
86 Output configuration settings in the file begin with a greater-than sign
88 followed by a file or ASL directory name and the configuration options for that file or directory.
89 These lines generally have the form:
91 .Dl > filename option ...
93 See the OUTPUT CONFIGURATION SETTINGS section for details.
95 Comments lines are ignored.
96 .Ss PARAMETER SETTINGS
97 The following parameter-settings are recognized by
100 .Bl -tag -width "bsd_max_dup_time" -compact -offset indent
102 Enables or disables internal debugging output.
103 This is probably of little interest to most users.
104 The debug parameter requires a value of
106 to enable debug output, or a value of
109 Debugging messages are written to /var/log/syslogd.log.
112 Sets the time interval for the mark facility.
113 The default is 0 seconds, which indicates that mark messages are not generated.
116 Sets the maximum time before writing a
117 .Dq "last message repeated <N> times"
118 message in a log file when duplicate messages have been detected.
119 The default is 30 seconds.
122 Sets the time-to-live for messages used by the utmp, wtmp, and lastlog subsystems.
123 The default is 31622400 seconds (approximately 1 year).
126 Sets the kernel message per second quota.
127 The default is value is 500.
128 A value of 0 disables the quota mechanism.
129 Note that this setting only limits the number of kernel messages that will be saved by
131 User processes are limited to 36000 messages per hour.
132 The limit for a user process is not enforced if a remote-control ASL filter is in
133 place for the process.
136 manual for enabling a remote-control filter using the
143 Sets the maximum file size for individual files in the ASL database.
144 The default is 25600000 bytes.
146 .Ss QUERY-ACTION RULES
147 Query-action rules are used to cause
149 to perform specific actions when received messages match a specified query pattern.
150 For example, to save certain messages in a file.
151 The rules are processed in the order in which they appear in the file.
152 This matters because some actions can affect further processing.
157 to stop processing the rules in a file for messages that match a given query pattern.
159 Query-action rules contain three components: a query, an action, and optional parameters specific to that action.
160 For example, the following rule matches log messages sent by the
162 process which have log priority levels in the range emergency to error.
163 If a received message matches,
165 posts a BSD notification for the key
166 .Dq com.example.log_message .
168 .Dl ? [= Sender example] [<= Level error] notify com.example.log_message
170 Queries comprise one or more message matching components, each of which has the form:
174 OP is a comparison operator.
175 It can have the following values:
177 .Bl -tag -width "<= " -compact -offset indent
179 true (always matches)
187 greater than or equal to
191 less than or equal to
194 It can also be preceded by one or more modifiers:
195 .Bl -tag -width "C " -compact -offset indent
209 KEY and VAL are message keys and values.
212 .Dl [= Sender example]
214 matches any message with value
223 matches any message with a value beginning with the letters GR, Gr, gr, or gR
228 meaning prefix) for the
231 The example query above,
233 .Dl [= Sender example] [N< Level 3]
235 matches any message from
237 with a level numerically less than 3
238 (string values are converted to integers, and the comparison is done on the integer values).
239 Note that the string values may be used equivalently for the Level key,
240 so the example above may also be written as:
242 .Dl [= Sender example] [< Level Error]
244 String values for levels may be any of the set
254 These strings may be upper, lower, or mixed case.
258 operator is useful to test for the presence of a particular key.
262 Will match any message that has a
264 key, regardless of its value.
266 As a special case, the query
270 matches all messages.
272 The following actions are available.
274 .Bl -tag -width "directory" -compact -offset indent
278 to save matching messages in the ASL database.
279 Note that if /etc/asl.conf contains no
283 will save all messages it receives in the ASL database.
286 Causes matching messages to be stored in a log file.
287 The file's path name must follow as the first parameter.
288 If the path already exists, it must be a plain file.
289 If the file does not exist, it will be created when the first message is written.
290 If the pathname specified is not an absolute path,
292 will treat the given path as relative to /var/log (for /etc/asl.conf),
293 or for other output modules relative to /var/log/module/NAME where NAME is the module name.
295 By default, the file's owner will be root, and the file will be readable by the admin group.
296 Various options may follow the file name to specify ownership and access controls,
297 printed log message format, and controls for file rotation, compression, time-to-live,
298 and other aspects of output file life-cycle management.
299 See the OUTPUT CONFIGURATION SETTINGS section for more details.
302 Causes matching messages to be stored in an ASL-format log message data store.
303 A directory path name must follow as the first parameter.
304 If the path exists, it must be a directory.
306 Messages saved to an ASL directory are saved in files that are named
313 are the year, month (01 to 12) and day of the month (01 to 31) associated with
315 This has the effect of saving messages in a separate file for each day.
317 By default, files in the directory will be owned by root, and readable by the admin group.
318 Various options may follow the directory name to control ownership, access controls,
319 and the management of the store and its contents.
320 See the OUTPUT CONFIGURATION SETTINGS section for a list of options that may be set for store directories.
325 to post a notification with
327 The notification key must appear as a single parameter following the
332 Causes a matching message to be ignored in all subsequent matching rules in the file.
333 Its scope is local to a single module configuration file.
336 Messages that match the query associated with a
338 action are not processed by the main ASL configuration file /etc/asl.conf.
339 While claimed messages are not processed by /etc/asl.conf,
340 they are not completely private.
341 Other modules may also claim messages,
342 and in some cases two or more modules may have claim actions
343 that match the same messages.
344 This action only blocks processing by /etc/asl.conf.
348 action may be followed by the keyword
350 In this case, only those messages that match the
352 query will be processed by subsequent rules in the module.
355 Sets read access controls for messages that match the associated query pattern.
357 will restrict read access to matching messages to a specific user and group.
358 The user ID number and group ID number must follow the
360 keyword as parameters.
363 Causes syslogd to write the text of matching messages to all terminal windows.
364 If optional text follows the
366 keyword, then that text is written rather that the matching message text.
367 Note that this action is restricted to the main ASL configuration file /etc/asl.conf.
370 Causes a matching message to be ignored in all subsequent matching rules in the file.
371 This action is equivalent to the
373 action in all module configuration files except the main ASL configuration file /etc/asl.conf.
374 When used in the main configuration file, the scope of the action is global,
375 and matching messages will be ignored by all ASL modules.
377 .Ss OUTPUT CONFIGURATION SETTINGS
378 Various options may follow the path name in a
383 For example, the following rule specifies that all messages from the
385 facility will be saved in the file
387 and that messages are printed in a
389 format that shows all the keys and values in the message:
391 .Dl ? [= Facility example] file example.log format=raw
393 Multiple options may be specified separated by whitespace characters.
396 .Dl ? [= Facility example] file example.log format=raw rotate=local compress ttl=3 mode=0640 uid=0 gid=5 gid=20
398 As a convenience, a file or directory name and any associated options can be specified on a separate
399 output configuration line following a
403 .Dl > example.log format=raw rotate=local compress ttl=3 mode=0640 uid=0 gid=5 gid=20
405 Options for a file or directory are taken from the first query-action rule
406 or output configuration line for the given path.
407 A good usage pattern for multiple rules that specify the same output file or directory is:
409 .Dl > example.log options ...
410 .Dl ? query1 file example.log
411 .Dl ? query2 file example.log
412 .Dl ? query3 file example.log
414 Most of the options listed below may be used with either file or directory outputs.
415 Exceptions are noted.
417 .Bl -tag -width "coalesce=VAL" -compact -offset indent
419 Controls the format of log messages saved in a file.
420 Note that this option is specific to file outputs.
421 It is ignored for ASL directories.
423 The format is specified by the value given for FMT.
424 Several pre-defined formats are available:
425 .Bl -tag -width "abcd"
429 daemon for system log files, e.g. /var/log/system.log.
431 Standard (default) format.
434 but includes the message priority level.
436 Prints the complete message structure.
437 Each key/value pair is enclosed in square brackets.
438 Embedded closing brackets and white space are escaped.
439 Time stamps are printed as seconds since the epoch.
441 The list of messages is printed as an XML property list.
442 Each message is represented as a dictionary in a array.
443 Dictionary keys represent message keys.
444 Dictionary values are strings.
446 The output file is written as an ASL-format data store file.
447 Files in this format may be read and searched using the
449 command line utility with the use of the
454 Custom format strings may also be specified.
455 Since custom formats often contain white-space characters,
456 the entire string may be enclosed in single or double quote characters,
457 or each white-space character may be preceded by a backslash escape character.
458 Escaped characters are not interpreted.
459 Custom format strings are described in detail in the READING MESSAGES section of the
464 Sets the mode of the file or files within an ASL directory.
465 The value MMM may be specified as a decimal value,
466 a hexadecimal value (if preceded by ``0x''),
467 or octal value (if preceded by ``0'').
470 Specifies the file's owner.
473 option is given, the first will be used to set ownership,
474 and subsequent user IDs will be given read access to in the files POSIX.1e ACLs.
475 Note that UIDs should be defined in the local Open Directory database, since
477 starts and may create the log file before network directory services are available.
478 Unknown UIDs and GIDs will be ignored when setting access controls.
481 Specifies the file's group.
484 option is given, the first will be used to set the file's group,
485 and subsequent group IDs will be given read access to in the files POSIX.1e ACLs.
486 As with UID=UUU options, groups should be defined in the local Open Directory database.
489 By default, files printed using the
493 formats will coalesce duplicates.
494 If two or more messages are logged within 30 seconds, and which differ only in time,
495 then the second and subsequent messages will not be printed.
496 When a different message is logged, or 30 seconds have elapsed since the initial
497 message was logged, a line with the text
498 .Dl --- last message repeated N times ---
499 will be added to the file.
502 The default may be overridden by specifying
508 may be used in place of
512 The following options all deal with file rotation and life-cycle management.
513 The FILE ROTATION section describes this in detail.
515 .Bl -tag -width "rotate=NAME_STYLE" -compact -offset indent
517 .It rotate=NAME_STYLE
518 Enables log file rotation and specifies the file naming scheme for rotated files.
519 This option does not apply to ASL directories.
520 Four styles are supported:
522 .Bl -tag -width "local-basic" -compact -indent
524 Rotated file names are of the form
525 .Dq example.log.T1340607600 .
526 The file names include the creation time of the file in seconds since the epoch.
529 Rotated file names are in ISO 8601 extended format, for example
530 .Dq example.log.2012-06-24T07:00:00Z .
531 The file names includes its creation time as a UTC date and time.
534 Rotated file names are in ISO 8601 basic format, for example
535 .Dq example.log.20120624T070000Z .
536 The file names includes its creation time as a UTC date and time.
539 Rotated file names are in ISO 8601 extended format, for example
540 .Dq example.log.2012-06-24T07:00:00-7 .
541 The file names includes its creation time as date and time in the local time zone.
542 The local timezone offset is included as a trailing part of the name.
545 Rotated file names are in ISO 8601 basic format, for example
546 .Dq example.log.20120624T070000-07 .
547 The file names includes its creation time as date and time in the local time zone.
548 The local timezone offset is included as a trailing part of the name.
551 Rotated file names are of the form
553 where N is an integer sequence number.
554 Files are re-numbered on each rotation so that the
556 file is the most recent.
561 appears without a value, the naming style defaults to
564 Note that using the local timezone for timestamped files may cause odd behavior on highly-mobile systems.
566 will delete files after a specified time-to-live (see below).
567 The age of the file is determined by the file name.
568 If files are created in different timezones but saved with a non-absolute timestamp,
569 the age calculation may result in some files being considered older or newer than they are in reality.
571 Also note that sequenced files (using the
573 style) will initially be checkpointed using a file name containing a timestamp in seconds.
575 will re-sequence the files when it scans for checkpoint files.
578 Specifies the number of days that older versions of rotated files should be allowed to remain in the filesystem.
579 Rotated files older than this limit are deleted.
582 By default, rotated files are left in the same directory as the original file.
583 However, in some cases it may be useful to move the rotated versions to a different
584 directory for archival or other reasons.
585 If this option is specified,
587 will move files to the directory given by PATH.
592 ignore write errors when saving messages.
595 will stop saving to a file or ASL directory after 5 consecutive write errors.
598 Enables gzip file compression for rotated log files.
599 When compressed, the extension
601 is appended to the file name.
604 Limits the size of an active log file.
605 SIZE may be an integer number of bytes, or the value may be followed by a single character
610 (upper or lower case),
611 to indicate a size limit in multiples of 1024 (kibibyte), 1048576 (mebibyte), or 1073741824 (gibibyte).
612 If a file exceeds this limit, it is immediately checkpointed by
614 and a new file is opened.
617 specifies a size limit before file compression is performed if the
619 option is also present.
622 Specifies a size limit for the total of all rotated versions of a file.
624 will delete rotated files, oldest first, to reduce the total below the limit.
625 SIZE may be specified in the same format as the file_max option.
631 work together to automatically provide all the features of file rotation.
632 However, it is useful to understand how the process works.
633 This section describes the file rotation options that may be used in /etc/asl.conf
634 or an ASL Output Module configuration file,
635 together with a description of how the system works to support those features.
637 If a file is marked for rotation,
639 will close the file at the start of a new day or when the file exceeds its
644 renames the file and starts a new file to continue logging.
645 The old file is renamed with the file's creation time included in its name.
646 This operation is called checkpointing the file.
653 .Dq example.log.T1340521200 ,
654 1340521200 being the time that the file was created.
655 It would then start a new
657 file and use it until midnight, when the cycle would be repeated.
659 Files are normally checkpointed at midnight.
660 If the system is sleeping or powered off, then files are checkpointed when
661 the the first message of a new day (local time) is received.
662 Files are also checkpointed if they exceed a size limit specified by a file_max option,
663 and they may be checkpointed manually through options provided by the
668 The checkpointed file name always contains the file's creation time.
669 If the options for the file include
671 then the timestamp will be a UTC date and time string.
673 causes the timestamp to be the date and time in the current local timezone.
674 Otherwise, the timestamp will be in seconds since the epoch.
677 only performs the checkpointing operation.
678 It closes old files, moves them out of the way, and starts writing new files.
679 Most of the work of file rotation is done by the
682 That includes moving files to a destination directory, compressing files,
683 re-naming files according to one of the naming style options,
684 deleting old files after they exceed their time-to-live,
685 and checking file space usage.
688 normally runs once during system start-up, and once a day just after midnight.
689 It may also be triggered occasionally by
691 and it may be run manually.
694 scans for any checkpointed files created by
696 and will rename the files (if required) to match the naming style specified by the
697 .Dq rotate=NAME_STYLE
701 is specified for a file, checkpointed files created by
703 contain a timestamp in seconds.
704 These files are renamed so that the file names
705 contain a sequence number.
706 The most recent version has the number
708 and older versions have higher numbers.
716 As well as renaming files,
718 may perform other actions.
719 If the file has been given a
722 the rotated versions of the file will be moved to the specified directory.
723 Files will be gzip compressed using the
727 option has been given.
728 If the total size of all the rotated versions of the file exceeds a value given in an
730 option, older version of the rotated file will be deleted to keep the total below the specified limit.
732 Although checkpoint and file rotation operations are normally done automatically,
734 supports an option that will trigger
736 to checkpoint files before
740 also supports an option to force files to be checkpointed without running
747 .Ss ASL OUTPUT MODULES
749 An ASL output module is created by a configuration file in the directory /etc/asl.
750 The file name is used as the module's name.
751 The format of the file is generally the same as
753 with a few exceptions.
754 Mdules may not have parameter setting lines for the system parameters listed in the
755 PARAMETER SETTINGS or ASLMANAGER PARAMETER SETTINGS sections,
760 Module configuration files are read by
762 when it starts, and whenever it gets a HUP signal.
765 are first processed according the the rules found in /etc/asl.conf
768 module), then the message is processed by the
769 rules from each module found in /etc/asl.
771 An exception to this is that messages that match the query in a
773 action rule in any module are not processed by the rules in /etc/asl.conf.
775 ASL output modules are enabled by default, but a module may include a parameter setting:
779 The module is still loaded by
781 but the module will not save messages to files or directories, and will not post BSD notifications.
783 Several mechanisms allow modules to be enabled or disabled dynamically.
784 One mechanism allows the setting of the
786 parameter to be based on the existence of a path in the filesystem,
787 or on the value associated with a dictionary key in a property list file.
788 On iOS only, the value of a key in an installed configuration profile may be tested.
790 To enable a module based on the existence of a file, the module may use:
792 .Dl = enable [File /a/b/c]
796 may be any filesystem path.
798 To enable a module based on the value of a dictionary key in a property list file,
800 .Dl = enable [Plist /path/config.plist] [= SomeKey SomeValue]
802 Any of the test operations described above in the QUERY-ACTION RULES section
803 may also be used in testing key / value pairs.
804 Multiple operations are also allowed, for example:
806 .Dl = enable [Plist /path/config.plist] [N>= DebugLevel 7] [S= Othervalue xyz]
808 If the property list file does not exist, the test will evaluate to zero.
809 The file may be in binary or xml format.
810 It may only contain a single dictionary object at its top level.
811 Only keys and values at the top level of the dictionary may be tested.
812 Values must be strings, integer values, doubles, UUIDs, dates, or booleans.
813 Boolean <true/> and <false/> values are converted to 1 and 0 respectively.
814 Values are converted into strings,
815 and string comparisons are used unless unless an
817 modifier is specified with the test operator.
819 On iOS, a module may test key / value pairs in a configuration profile using the
820 same key / value tests that may be used for property list files.
822 .Dl = enable [Profile name] [= Verbose 1]
824 The profile name is the value of its DefaultsDomainName key.
825 The test will evaluate to zero if the profile is not installed.
827 A module may be also enabled or disabled using
836 may enable or disable modules.
838 A module may be enabled or disabled by sending an
840 message as shown in this example, which enables a module named
841 .Dq com.apple.example :
844 aslmsg ctl = asl_new(ASL_TYPE_MSG);
845 asl_set(ctl, ASL_KEY_OPTION, "control");
846 asl_set(ctl, ASL_KEY_MSG, "@ com.apple.example enable 1");
850 A control message may also be sent using
852 as the following example shows to disable a module named
853 .Dq com.apple.example :
855 .Dl sudo syslog -module com.apple.example enable 0
857 A module may also enable or disable itself.
858 Although a module that is not enabled will not write or post notifications,
859 it still will scan messages.
860 The module may contain conditional parameter-setting rules like:
862 .Dl = [= Color Green] enable 1
863 .Dl = [= Color Red] enable 0
865 This is similar to a query-action rule.
866 If a message received by syslogd matches the specified query,
867 in this case having a Color key with the value Green or Red,
868 then the enable parameter is set as specified.
869 So in this example, the module would be enabled and disabled
870 whenever syslogd received a message containing the appropriate value for the
873 .Ss ASLMANAGER PARAMETER SETTINGS
874 The following parameter-settings are recognized by
877 .Bl -tag -width "aslmanager_debug" -compact -offset indent
879 Enables or disables internal debugging output.
880 This is probably of little interest to most users.
881 The debug parameter requires a value of
883 to enable debug output, or a value of
886 Debug messages saved in an auxiliary file attached to an ASL log message.
887 The file may be inspected by opening the file attachement from the Console utility.
890 Sets the time-to-live in days for messages in the ASL database.
891 The default is 7 days.
894 Sets the maximum size for for the ASL database.
895 The default is 150000000 bytes.
898 Enables or disables archiving of the ASL database.
899 The archive parameter requires a value of
901 to enable archiving, or a value of
904 An option archive directory path may follow the
908 If enabled, files removed from the ASL database are moved to the archive directory.
909 The default archive directory path is /var/log/asl.archive.
912 The ASL database path used by
914 The default is /var/log/asl.
915 Note that this parameter is ignored by
919 Files copied to the ASL database archive will be given the specified access mode.
920 The default is 0400, so archive files will only be readable by root.