Log#

O módulo escreve logs de requisição no formato especificado.

Os logs são escritos no contexto de um location onde o processamento termina. Este pode ser um location diferente do original se um redirecionamento interno ocorrer durante o processamento da requisição.

Exemplo de Configuração#

log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';

access_log /spool/logs/angie-access.log compression buffer=32k;

Diretivas#

access_log#

Sintaxe

access_log path [format [buffer=size] [gzip=level]] [flush=time] [if=condition];

access_log off;

Padrão

access_log logs/access.log combined; (o caminho depende do parâmetro de compilação --http-log-path)

Contexto

http, server, location, if in location, limit_except

Define o path, format e configurações de escrita em buffer para o log. Múltiplos logs podem ser usados no mesmo nível de configuração. O log para syslog é configurado especificando o prefixo "syslog:" no primeiro parâmetro. O valor especial off cancela todas as diretivas access_log para o nível atual. Se nenhum formato for especificado, o formato predefinido "combined" é usado.

Se o tamanho do buffer for especificado usando o parâmetro buffer ou o parâmetro gzip for especificado, a escrita será feita em buffer.

Aviso

O tamanho do buffer não deve exceder o tamanho de uma escrita atômica em um arquivo de disco. Para FreeBSD este tamanho é ilimitado.

Quando o buffer está habilitado, os dados são escritos no arquivo:

  • se a próxima linha de log não couber no buffer;

  • se os dados no buffer estiveram lá por mais tempo que o intervalo de tempo especificado pelo parâmetro flush;

  • ao reabrir o arquivo de log ou terminar o processo worker.

Se o parâmetro gzip for especificado, o buffer será comprimido antes de escrever no arquivo. O nível de compressão pode ser definido no intervalo de 1 (mais rápido, mas pior compressão) a 9 (mais lento, mas melhor compressão). Por padrão, um tamanho de buffer de 64K bytes e nível de compressão 1 são usados. Os dados são comprimidos em blocos atômicos, e a qualquer momento o arquivo de log pode ser descomprimido ou lido usando o utilitário zcat.

Exemplo:

access_log /path/to/log.gz combined gzip flush=5m;

Nota

Para suporte à compressão gzip de logs, o Angie deve ser compilado com a biblioteca zlib.

Variáveis podem ser usadas no caminho do arquivo, mas tais logs têm algumas limitações:

  • o usuário sob cujas credenciais os processos worker executam deve ter permissões para criar arquivos no diretório com tais logs;

  • o buffer não funciona;

  • o arquivo é aberto para cada escrita de log e fechado imediatamente após a escrita. No entanto, como descritores de arquivos frequentemente usados podem ser armazenados em cache, durante a rotação de logs dentro do tempo especificado pelo parâmetro valid da diretiva open_log_file_cache, a escrita pode continuar no arquivo antigo.

  • para cada escrita de log, a existência do diretório raiz para a requisição é verificada — se este diretório não existir, o log não é criado. Portanto root e access_log devem ser descritos no mesmo nível de configuração:

server {
    root       /spool/vhost/data/$host;
    access_log /spool/vhost/logs/$host;
    ...

O parâmetro if habilita o log condicional. Uma requisição não será logada se o resultado da avaliação da condição for "0" ou uma string vazia. No exemplo a seguir, requisições com códigos de resposta 2xx e 3xx não serão logadas:

map $status $loggable {
    ~^[23]  0;
    default 1;
}

access_log /path/to/access.log combined if=$loggable;

log_format#

Sintaxe

log_format name [escape=:samp:default | json | none ] string ...;

Padrão

log_format combined "...";

Contexto

http

Especifica o formato do log.

O parâmetro escape permite definir o escape de caracteres para json ou default em variáveis; por padrão default é usado. O valor none desabilita o escape de caracteres.

Ao usar default, caracteres """, "\", e caracteres com valores menores que 32 ou maiores que 126 são escapados como "\xXX". Se o valor da variável não for encontrado, um hífen "-" será escrito no log como o valor.

Ao usar json, todos os caracteres não permitidos em strings JSON são escapados: caracteres """ e "\" são escapados como "\"" e "\\", caracteres com valores menores que 32 são escapados como "\n", "\r", "\t", "\b", "\f", ou "\u00XX".

Linhas de cabeçalho enviadas ao cliente começam com o prefixo sent_http_, por exemplo, $sent_http_content_range.

O formato predefinido combined sempre existe na configuração:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

open_log_file_cache#

Sintaxe

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

open_log_file_cache off;

Padrão

open_log_file_cache off;

Contexto

http, server, location

Define um cache que armazena descritores de arquivo de logs frequentemente usados cujos nomes são especificados usando variáveis. Parâmetros:

max

Define o número máximo de descritores no cache; quando o cache transborda, os descritores menos recentemente usados (LRU) são fechados.

inactive

Define o tempo após o qual um descritor em cache é fechado se não foi acessado durante este tempo. O padrão é 10 segundos.

min_uses

Define o número mínimo de usos do arquivo durante o tempo especificado pelo parâmetro inactive, após o qual o descritor de arquivo permanecerá aberto no cache. O padrão é 1.

valid

Especifica após que tempo verificar se o arquivo ainda existe sob o mesmo nome. O padrão é 60 segundos.

off

Desabilita o cache.

Exemplo de uso:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;