Eu vasculhei Config.cppo arquivo responsável por analisar a configuração. A configuração de exemplo realmente faz um bom trabalho ao capturar as opções disponíveis - não há muitas
Quando me refiro ao "exemplo de saída" abaixo, estou falando dessa linha (extraída aleatoriamente da página de amostra):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
A marca raiz é <loggedFS>. Possui dois atributos opcionais:
- logEnabled é uma string - "true" significa que ela realmente deve gerar informações de log; qualquer outra coisa desabilita todos os logs. O padrão é "true", já que esse é o objetivo principal do programa
- printProcessName é uma string - "true" significa que a saída do log incluirá o nome do processo; qualquer outra coisa significa que não. O padrão é "true". Na saída de exemplo,
kded [kdeinit]é o nome do processo
Os únicos nós filhos com os quais se preocupa são <include>e <exclude>. No exemplo, eles agrupam os sub <includes>e os <excludes>blocos, mas esses são ignorados pelo analisador (assim como qualquer outro nó, exceto <include>e <exclude>).
Naturalmente, as <include>regras fazem com que ele produza a linha de log, se corresponderem, enquanto as <exclude>linhas fazem com que não. Em caso de sobreposição, <exclude>substituições <include>. Normalmente, você precisa de pelo menos uma <include>regra para corresponder para que um evento seja registrado, mas uma exceção é se houver 0 <include>regras - todos os eventos serão registrados, mesmo se houver <exclude>linhas correspondentes .
Ambos <include>e <exclude>assumem os mesmos atributos:
- extension é uma expressão regular que corresponde ao caminho absoluto do arquivo que foi acessado / modificado / qualquer que seja (
extensioné um nome bastante ruim, mas acho que esse é o uso comum). Por exemplo, se você touch /mnt/loggedfs/some/file, a expressão regular em extensionprecisaria corresponder (parcial)/mnt/loggedfs/some/file
- uid é uma string que contém um número inteiro ou
*. A regra corresponde apenas a uma determinada operação se o proprietário do processo que causou a operação tiver o ID do usuário especificado ( *naturalmente significa que qualquer ID do usuário corresponde). Na saída de exemplo, 1000é o uid
- action é o tipo específico de operação executada no sistema de arquivos. No exemplo de saída,
getattré a ação. As ações possíveis são:
- Acesso
- chmod
- chown
- getattr
- ligação
- mkdir
- mkfifo
- mknod
- aberto
- open-readonly
- leitura aberta
- open-writeonly
- ler
- readdir
- readlink
- renomear
- rmdir
- statfs
- ligação simbólica
- truncar
- desvincular
- utime
- utimens
- Escreva
- retname é uma expressão regular. Se o código de retorno da operação real do sistema de arquivos executada pelo LoggedFS for 0, a expressão regular será comparada com a sequência
SUCCESS. Um código de retorno diferente de zero faz com que ele corresponda FAILURE. Esses são os valores só é possível, então provavelmente você está ou vai para codificar SUCCESS, FAILUREou uso .*se você quer tanto. Na saída de exemplo, SUCCESSé oretname
Ao contrário dos <loggedFS>atributos, estes não têm padrões. Além disso, embora o analisador reconheça atributos desconhecidos e com erros, ele não detecta atributos ausentes, portanto, se você esquecer um atributo, ele usará memória não inicializada.
/a, excluir/a/be incluir/a/b/c, será/a/b/cassistido? A inclusão de um diretório sempre inclui seu conteúdo?