我戳了Config.cpp一下,负责解析配置的文件。示例配置实际上在捕获可用选项方面做得很好——没有太多
当我提到下面的“示例输出”时,我指的是这一行(从示例页面中随机抽取):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
Run Code Online (Sandbox Code Playgroud)
根标签是<loggedFS>. 它有两个可选属性:
kded [kdeinit]是进程名称它唯一关心的子节点是<include>和<exclude>。在示例中,它们将那些放在<includes>和<excludes>块下,但解析器会忽略它们(除了<include>and之外的任何其他节点也是如此<exclude>)。
自然地,如果<include>规则匹配,规则会导致它输出日志行,而<exclude>行导致它不输出。在重叠的情况下,<exclude>覆盖<include>. 通常,您需要至少一个<include>规则来匹配要记录的事件,但一个例外是如果有 0 个<include>规则——那么所有事件都会被记录,即使有匹配的<exclude>行。
双方<include>并<exclude>采取相同的属性:
extension是一个相当糟糕的名字,但我想这是常见的用法)。例如,如果你touch /mnt/loggedfs/some/file,正则表达式extension需要(部分)匹配/mnt/loggedfs/some/file*. 如果导致操作的进程的所有者具有指定的用户 ID(*自然意味着任何用户 ID 匹配),则该规则仅匹配给定的操作。在示例输出中,1000是 uidgetattr是操作。可能的操作是:
SUCCESS。非零返回码使其与FAILURE. 这些是唯一可能的值,所以很有可能你要么去硬编码SUCCESS,FAILURE或使用.*,如果你想两者。在示例输出中,SUCCESS是retname与<loggedFS>属性不同,这些没有默认值。此外,虽然解析器会识别未知属性并出错,但它不会检测丢失的属性,因此如果您忘记了某个属性,它将使用未初始化的内存。