
Existe uma maneira de truncar o conteúdo de um campo armazenado no log de acesso?
Estou interessado em manter apenas os primeiros dez caracteres do User-Agent.
Responder1
Primeiro, você introduz uma variável personalizada que contém o agente do usuário truncado. Para isso você usa a map
diretiva na variável regular do agente do usuário, $http_user_agent
. A documentação do módulo de mapa está aqui:http://nginx.org/en/docs/http/ngx_http_map_module.html. Então você configura o formato de log usando a log_format
diretiva, veja a documentação emhttps://docs.nginx.com/nginx/admin-guide/monitoring/logging/. Finalmente, você diz para access_log
usar seu formato de log personalizado.
Resumindo:
# ...
http {
map $http_user_agent $trunc_agent {
default "";
"~*(?P<tr>.{0,10}).*" $tr;
}
log_format myformat '[other fields] "$trunc_agent"';
access_log [logfile] myformat;
}
# ...