Abra qualquer fluxo de syslog e a primeira coisa em cada linha é um número entre colchetes angulares: <134>, <34>, <165>. Esse número é o PRI, abreviação de prioridade, e ele carrega duas informações ao mesmo tempo. Lê-lo é uma das pequenas habilidades mais úteis no tratamento de logs.

A fórmula

Um PRI combina uma facility, que nomeia o subsistema que produziu a mensagem, e uma severity, que classifica o quão urgente ela é. A RFC 5424 define o empacotamento:

PRI = Facility * 8 + Severity

Para fazer o caminho inverso, você o separa com divisão inteira e um resto:

Facility = PRI / 8   (número inteiro)
Severity = PRI % 8   (resto)

Essa é toda a regra. O multiplicador é oito porque existem exatamente oito níveis de severity (0 a 7), então cada facility ocupa um bloco de oito valores de PRI consecutivos.

Exemplos resolvidos

Pegue <134>, o padrão mais comum que você verá. Divida: 134 dividido por 8 é 16 com resto 6. A facility 16 é local0 e a severity 6 é informational, então esta é uma mensagem informativa rotineira em local0. Os próprios exemplos da RFC 5424 funcionam da mesma forma: <34> é facility 4 (segurança e autorização, frequentemente chamada auth) na severity 2 (critical), e <165> é facility 20 (local4) na severity 5 (notice).

O formato no fio

No fio, o PRI vem entre colchetes angulares e fica bem no início da mensagem, imediatamente seguido pelo dígito de versão na RFC 5424. A faixa válida é de 0 a 191, porque a maior facility é 23 e a maior severity é 7, e 23 vezes 8 mais 7 é 191. Uma pequena regra pega muita gente: zeros à esquerda não são permitidos, então uma mensagem de kernel com severity 0 é escrita <0>, nunca <00>, e o único PRI que pode começar com zero é o próprio valor zero.

Lendo e escrevendo na hora

O decodificador de PRI syslog faz essa aritmética nos dois sentidos: cole um PRI e ele separa a facility e a severity com seus nomes, ou escolha uma facility e uma severity e ele dá o PRI e sua forma entre colchetes. Para aprender o que cada facility e severity significa, veja facilities e severities do syslog; para ver quais delas seus dispositivos usam, veja syslog em dispositivos de rede.