Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
multilog(8)		     System Manager's Manual		     multilog(8)

NAME
     multilog  - reads a sequence of lines from stdin and appends selected lines
     to any number of logs.

SYNOPSIS
     multilog script

DESCRIPTION
     script consists of any number of arguments. Each argument specifies one ac-
     tion. 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  fi-
     nal line then multilog inserts a final newline.

     multilog  writes a message to stderr and exits 111, without reading any in-
     put, 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 LINES
     Each line is initially selected. The following actions change this:

     -pattern
	    deselects the line if pattern matches the line.

     +pattern
	    selects the line if pattern matches the line.

     F	    changes  the  pattern  match  mode to use fnmatch for all subsequent
	    patterns.

     S	    changes the pattern match mode back to use simple patterns (the  de-
	    fault).

   SIMPLE PATTERNS
     pattern 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 PATTERNS
     When  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,

     ?	    (not between brackets) matches any single character,

     *	    (not  between  brackets)  matches  any  string,  including the empty
	    string,

     [...]  matches a single character, and

     \?, \*, and \[
	    match ?, *, [ exactly, respectively.

     The expression [...]  matches any single character enclosed by  the  brack-
     ets.   If	the  first  character  within  the brackets is !, the expression
     matches any character except those enclosed by the brackets.   Two  charac-
     ters  within  the brackets separated by - denote a range.	[A-F] is equiva-
     lent to [ABCDEF].	The characters ?, *, and [ lose  their	special  meaning
     within the brackets.

     See the fnmatch(3) or glob(7) man pages for more details.

ALERTS
     The action

     e	    prints (the first 200 bytes of) each selected line to stderr.

STATUS FILES
     The action

     =file  replaces  the  contents  of file with (the first 1000 bytes of) each
	    selected line, padded with newlines to 1001 bytes. There is no  pro-
	    tection of file against power outages.

	    For example, the sequence of actions

		 -*
		 +STAT*
		 =log/status

	    maintains log/status as a copy of the most recent line starting with
	    STAT.

TIMESTAMPING
     The action

     t	    inserts  an  @,  a	precise  timestamp, and a space in front of each
	    line, using the same format as tai64n(8).

     T	    inserts an accustamp-style timestamp and a space in  front	of  each
	    line,  formatted  as  S.M where S is the number of seconds since the
	    UNIX epoch (midnight January 1 1970-01-01 UTC) and M is  the  number
	    of microseconds.

     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 LOGS
     If dir starts with a dot or slash then the action

     dir    appends each selected line to a log named dir.  If dir does not  ex-
	    ist, multilog creates it.

     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:

     .s     This file is completely processed and safely written to disk.   This
	    code may be changed as described below.

     .u     This  file was being created at the moment of an outage. It may have
	    been truncated and has not been processed.

     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 contin-
     ues 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.

     ssize  sets  the  maximum	file  size for subsequent dir actions.	multilog
	    will decide that current is big enough if current  has  size  bytes.
	    (multilog  will  also decide that current is big enough if it sees a
	    newline within 2000 bytes of the maximum file size; it tries to fin-
	    ish log files at line boundaries.)	size must be  between  4096  and
	    2147483647. The default maximum file size is 99999.

	    In	versions 0.75 and above: If multilog receives an ALRM signal, it
	    immediately decides that current is big enough, if current	is  non-
	    empty.

     nnum   sets  the  number of log files for subsequent dir actions. After re-
	    naming current, if multilog sees num or more old log files,  it  re-
	    moves  the old log file with the smallest timestamp.  num must be at
	    least 2. The default number of log files is 10.

     !processor
	    sets a processor for subsequent dir  actions.   multilog  will  feed
	    current through processor and save the output as an old log file in-
	    stead of current.  multilog will also save any output that processor
	    writes  to descriptor 5, and make that output readable on descriptor
	    4 when it runs processor on the  next  log	file.  For  reliability,
	    processor  must exit nonzero if it has any trouble creating its out-
	    put; multilog will then run it again. Note	that  running  processor
	    may block any program feeding input to multilog.

     wcode  Changes  the  "safely  written"  code  from .s as described above to
	    .code for subsequent dir actions.	This  is  useful  when	using  a
	    processor  that compresses or otherwise translates the completed log
	    file into a different file format.

SEE ALSO
     fnmatch(3), glob(7), envdir(8), envini(8),  envuidgid(8),	fghack(8),  pgr-
     phack(8),	readproctitle(8),  setlock(8),	setuidgid(8),  setuser(8), soft-
     limit(8), supervise(8), svc(8),  svok(8),	svscan(8),  svscanboot(8),  svs-
     tat(8), tai64n(8), tai64nlocal(8)

								     multilog(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=multilog&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help