丹·伯恩斯坦(Dan Bernstein)的multilog显然可以做到这一点-或也许是其中的大多数,同时通过文件描述符向!processor提供出口以弥补您所希望的差异-尽管20M / 1G大小规格可能需要一些修改,因为看起来16M是它的超出每个日志的限制。接下来,大多数情况下是从上面的链接进行复制+粘贴选择,尽管该链接还详细说明了其他选项,例如每行加时间戳,维护仅包含最新行匹配模式的其他文件等等。 。
接口
multilog script
... 脚本包含任意数量的参数。每个参数指定一个动作。按输入的每一行顺序执行操作。
选择线
最初选择了每一行。那个行动...
-pattern
...如果图案与线匹配,则取消选择线。那个行动...
+pattern
如果pattern与该行匹配,则选择该行。
... 模式是一串星星和非星星。它以相同的顺序匹配由所有星号和非星号匹配的字符串的任何串联。一个非明星匹配自己。模式结尾之前的星号与任何不包含模式下一个字符的字符串匹配。模式结尾的星号与任何字符串匹配。
自动旋转日志
如果dir以点或斜杠开头,则操作...
dir
...将每条选定的行添加到名为dir的日志中。如果dir不存在,则multilog
创建它。
日志格式如下:
dir是一个目录,包含一定数量的旧日志文件,一个名为current的日志文件以及其他用于multilog
跟踪其操作的文件。
每个旧日志文件的名称都以@开头,以精确的时间戳显示文件完成的时间,并以以下代码之一结尾:
- .s:此文件已完全处理,并已安全地写入磁盘。
- .u:中断时正在创建此文件。它可能已被截断。尚未处理。
那个行动...
ssize
...设置后续目录操作的最大文件大小。如果current具有大小字节multilog
,则将确定current足够大。(如果它在最大文件大小的2000个字节内看到换行符,还将确定current是否足够大;它会尝试在行边界处完成日志文件。)大小必须介于4096和16777215之间。默认的最大文件大小为99999。multilog
在0.75及更高版本中:如果multilog
收到ALRM信号,则如果电流为非空,则立即确定电流足够大。
(注意:如果有必要,我怀疑zsh
schedule
可以很容易地说服内置ALRM
函数以指定的时间间隔发送。)
那个行动...
nnum
...设置后续目录操作的日志文件数。重命名current之后,如果multilog
看到num个或更多的旧日志文件,它将删除时间戳最小的旧日志文件。num必须至少为2。日志文件的默认数量为10。
那个行动...
!processor
...为后续的目录操作设置处理器。multilog
会通过处理器传送当前的信息,并将输出保存为旧的日志文件而不是current。还将保存处理器写入描述符5的所有输出,并在描述符在下一个日志文件上运行处理器时使该输出在描述符4上可读。为了提高可靠性,如果处理器在创建输出时遇到任何问题,则必须退出非零值。然后将再次运行它。请注意,运行中的处理器可能会阻止将任何程序输入到。multilog
multilog
multilog