Я проколол Config.cpp
файл, отвечающий за анализ конфигурации. Конфигурация примера на самом деле довольно неплохо справляется со сборкой доступных опций - их не так много.
Когда я ссылаюсь на «пример выходных данных» ниже, я говорю об этой строке (случайно взятой со страницы примера):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
Корневой тег есть <loggedFS>
. У него есть два необязательных атрибута:
kded [kdeinit]
имя процессаЕдинственные дочерние узлы, о которых он заботится - это <include>
и <exclude>
. В этом примере они группируют блоки under <includes>
и <excludes>
блоки, но они игнорируются парсером (как и любые другие узлы, кроме <include>
и <exclude>
).
Естественно, <include>
правила заставляют его выводить строку журнала, если они совпадают, в то время как <exclude>
строки заставляют это не делать. В случае перекрытия <exclude>
переопределяет <include>
. Обычно <include>
для регистрации события требуется по крайней мере одно правило, но исключение составляет 0 <include>
правил - все события регистрируются, даже если есть совпадающие <exclude>
строки .
Оба <include>
и <exclude>
принимают одинаковые атрибуты:
extension
это довольно плохое имя, но я думаю, что это обычное использование). Например, если вы touch /mnt/loggedfs/some/file
, регулярное выражение в extension
должно соответствовать (частично)/mnt/loggedfs/some/file
*
. Правило соответствует данной операции только в том случае, если владелец процесса, вызвавшего операцию, имеет указанный идентификатор пользователя ( *
естественно, это означает, что совпадает любой идентификатор пользователя). В выходных данных примера, 1000
UIDgetattr
это действие. Возможные действия:
SUCCESS
. Ненулевой код возврата приводит к его сопоставлению FAILURE
. Таков возможное только значение, так что скорее всего вы либо собираетесь жёстко SUCCESS
, FAILURE
или использование , .*
если вы хотите , и другие. В выходных данных примера SUCCESS
этоretname
В отличие от <loggedFS>
атрибутов, они не имеют значений по умолчанию. Кроме того, хотя анализатор распознает неизвестные атрибуты и выдает ошибку, он не обнаруживает отсутствующие атрибуты, поэтому, если вы забудете атрибут, он будет использовать неинициализированную память.
/a
, исключаете/a/b
и включаете/a/b/c
, это/a/b/c
смотреть? Включает ли каталог всегда его содержимое?<include extension="/a" uid="*" action=".*" retname=".*" />
что будет соответствовать каждой операции, которая работает с файлом, путь которого содержит/a
- это может даже быть/foo/abc/bar
. Вы, вероятно, хотите связать их всех с помощью^
и$
, но затем вам нужно включить весь путь, чтобы он соответствовал