Eu toquei em Config.cpp
, o 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 sobre essa linha (retirada aleatoriamente da página de amostra):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
A tag raiz é <loggedFS>
. Tem dois atributos opcionais:
- logEnabled é uma cadeia de caracteres - "true" significa que deve realmente gerar informações de log; qualquer outra coisa desabilita todos os registros. O padrão é "true", já que esse é o ponto 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". No exemplo de saída,
kded [kdeinit]
é o nome do processo
Os únicos nós filhos com os quais se importa são <include>
e <exclude>
. No exemplo, eles agrupam os que estão em <includes>
e <excludes>
blocks, mas eles são ignorados pelo analisador (assim como qualquer outro nó, exceto <include>
e <exclude>
).
Naturalmente, as regras <include>
fazem com que a linha de log seja exibida se corresponderem, enquanto as linhas <exclude>
não o fazem. No caso de sobreposição, <exclude>
substitui <include>
. Normalmente, você precisa de pelo menos uma regra <include>
para corresponder a um evento a ser registrado, mas uma exceção é se houver 0 <include>
rules - então todos os eventos são registrados, mesmo se houver correspondência <exclude>
linhas .
Tanto <include>
quanto <exclude>
usam os mesmos atributos:
-
extensão é uma expressão regular que corresponde ao caminho absoluto do arquivo que foi acessado / modificado / o que quer que seja (
extension
é um nome bastante ruim, mas acho que é o uso comum). Por exemplo, se você fortouch /mnt/loggedfs/some/file
, a expressão regular emextension
precisaria corresponder (parcial) a/mnt/loggedfs/some/file
-
uid é uma string que contém um inteiro ou
*
. A regra só corresponde 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). No exemplo de saída,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:- acessar
- chmod
- chown
- getattr
- link
- mkdir
- mkfifo
- mknod
- aberto
- somente leitura
- open-readwrite
- somente gravação aberta
- ler
- readdir
- readlink
- renomear
- rmdir
- statfs
- link simbólico
- 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á correspondida com a string
SUCCESS
. Um código de retorno diferente de zero faz com que ele corresponda aFAILURE
. Esses são os únicos valores possíveis, então é bem provável que você queira codificarSUCCESS
,FAILURE
ou usar.*
se quiser os dois. No exemplo de saída,SUCCESS
é oretname
Ao contrário dos atributos <loggedFS>
, eles não têm padrões. Além disso, embora o analisador reconheça atributos desconhecidos e elimine erros, ele não detecta atributos ausentes, portanto, se você esquecer um atributo, ele usará memória não inicializada.