Adicione variáveis customizadas ao log de acesso nginx do PHP-FPM

1

Com o log_format é possível incluir um intervalo de variáveis, como $ http_user_agent:

link

Mas é possível incluir uma variável do PHP-FPM?

Por exemplo, gostaria de incluir o ID do usuário conectado no access_log .

Uma possibilidade é definir um cabeçalho em PHP e usar $ sent_http_XXX:

log_format inc_info '... [$sent_http_x_user_id] ...';
access_log /var/log/nginx/access.log inc_info;

<?php
  header('X-User-ID: ' . head(USER_ID));
?>

Mas isso é um pouco hacky (enquanto envia valores para o navegador), e não funciona se você estiver usando register_shutdown_function() no PHP (por exemplo, se você mostrasse o tempo de processamento do DB), pois os cabeçalhos já foram enviado.

Isso pode ser feito no Apache via:

LogFormat "... [%{USER_ID}n] ..." inc_info
CustomLog /var/log/httpd/access_log inc_info

Com o PHP correspondente:

if (function_exists('apache_note')) {
    apache_note('USER_ID', USER_ID);
}
    
por Craig Francis 08.09.2014 / 18:43

0 respostas

Tags