|
NAMEmultilog - reads a sequence of lines from stdin and appends selected lines to any number of logs.SYNOPSISmultilog scriptDESCRIPTIONscript consists of any number of arguments. Each argument specifies one action. The actions are carried out in order for each line of input. Note that actions may contain shell metacharacters that need to be quoted when multilog is run from a shell.multilog exits 0 when it sees the end of stdin. If stdin has a partial final line then multilog inserts a final newline. multilog writes a message to stderr and exits 111, without reading any input, if it runs out of memory or if another multilog process is writing to one of the same automatically rotated logs. If multilog has trouble writing to disk after it starts reading input, it writes a message to stderr, pauses, and tries again, without losing any data. Note that this may block any program feeding input to multilog. If multilog receives a TERM signal, it will read and process data until the next newline, and then exit, leaving stdin at the first byte of data it has not processed. SELECTING LINESEach line is initially selected. The following actions change this:
SIMPLE PATTERNSpattern is a string of stars and non-stars. It matches any concatenation of strings matched by all the stars and non-stars in the same order. A non-star matches itself. A star before the end of pattern matches any string that does not include the next character in pattern. A star at the end of pattern matches any string.For example, the action +hello selects hello. It does not select hello world. The action -named[*]: Cleaned cache * deselects named[135]: Cleaned cache of 3121 RRs. The first star matches any string that does not include a right bracket. The action -* deselects every line. To save memory, multilog actually checks pattern against only the first 1000 characters of each line. FNMATCH PATTERNSWhen fnmatch mode is selected, multilog uses the system's fnmatch function to match pattern. This mode is less efficient than the simple patterns, but more flexable in the types of patterns it allows.In particular,
The expression [...] matches any single character enclosed by the brackets. If the first character within the brackets is !, the expression matches any character except those enclosed by the brackets. Two characters within the brackets separated by - denote a range. [A-F] is equivalent to [ABCDEF]. The characters ?, *, and [ lose their special meaning within the brackets. See the fnmatch(3) or glob(7) man pages for more details. ALERTSThe action
STATUS FILESThe action
TIMESTAMPINGThe action
These are required to be the first action. Patterns apply to the line after the timestamp is inserted. For example, if multilog t '-*' '+* fatal: *' ./main reads the line fatal: out of memory then it will log a line such as @400000003b4a39c23294b13c fatal: out of memory with the first * matching the timestamp. You can use tai64nlocal(8) to convert these timestamps to human-readable form. AUTOMATICALLY ROTATED LOGSIf dir starts with a dot or slash then the action
Do not attempt to write to one log from two simultaneous multilog processes, or two actions in one process. The log format is as follows. dir is a directory containing some number of old log files, a log file named current, and other files for multilog to keep track of its actions. Each old log file has a name beginning with @, continuing with a precise timestamp showing when the file was finished, and ending with one of the following codes:
Beware that NFS, async filesystems, and softupdates filesystems may discard files that were not safely written to disk before an outage. While multilog is running, current has mode 644. If multilog sees the end of stdin, it writes current safely to disk, and sets the mode of current to 744. When it restarts, it sets the mode of current back to 644 and continues writing new lines. When multilog decides that current is big enough, it writes current safely to disk, sets the mode of current to 744, and renames current as an old log file.
SEE ALSOfnmatch(3), glob(7), envdir(8), envini(8), envuidgid(8), fghack(8), pgrphack(8), readproctitle(8), setlock(8), setuidgid(8), setuser(8), softlimit(8), supervise(8), svc(8), svok(8), svscan(8), svscanboot(8), svstat(8), tai64n(8), tai64nlocal(8) Visit the GSP FreeBSD Man Page Interface. |