19.8. Relatório e registro de erros #

19.8.1. Onde registrar
19.8.2. Quando registrar
19.8.3. O que registrar
19.8.4. Uso da saída de registro no formato CSV
19.8.5. Uso da saída de registro no formato JSON
19.8.6. Título do processo

19.8.1. Onde registrar #

log_destination (string) #

O PostgreSQL oferece suporte a vários métodos para registrar mensagens do servidor, incluindo stderr, csvlog, jsonlog e syslog. No Windows, também há suporte para eventlog. Deve-se definir este parâmetro como uma lista de destinos desejados separados por vírgulas. O padrão é registrar apenas na saída de erro padrão (stderr). Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

Se csvlog estiver presente em log_destination, as entradas de registro serão geradas no formato valor separado por vírgula (CSV), conveniente para carregar registros em tabelas. Veja Uso da saída de registro no formato CSV para obter detalhes. Para gerar a saída de registro no formato CSV, o parâmetro logging_collector deverá estar ativo.

Se jsonlog estiver incluído em log_destination, as entradas de registro serão geradas no formato JSON, conveniente para carregar registros em programas. Veja Uso da saída de registro no formato JSON para obter detalhes. Para gerar a saída de registro no formato JSON, o parâmetro logging_collector deverá estar ativo.

Quando stderr, csvlog ou jsonlog estiverem presentes, será criado o arquivo current_logfiles para registrar a localização do(s) arquivo(s) de registro em uso no momento pelo coletor de registros e o destino de registro associado. Isto oferece uma maneira conveniente de encontrar os registro em uso no momento pela instância. A seguir está um exemplo do conteúdo deste arquivo:

stderr log/postgresql.log
csvlog log/postgresql.csv
jsonlog log/postgresql.json

o arquivo current_logfiles será recriado quando um novo arquivo de registro for criado como efeito da rotação, e quando log_destination for recarregado. Ele será removido quando nenhum entre stderr, csvlog ou jsonlog estiver incluído em log_destination, e quando o coletor de registros está inativo.

Nota

Na maioria dos sistemas Unix, é necessário alterar a configuração do daemon syslog do sistema para poder usar a opção syslog em log_destination. O PostgreSQL pode registrar mensagens nas facilidades (facility) de syslog de LOCAL0 até LOCAL7 [127] (veja syslog_facility), mas a configuração padrão do syslog, na maioria das plataformas, irá descartar todas estas mensagens. Será necessário adicionar algo como

local0.* /var/log/postgresql

no arquivo de configuração do daemon syslog para funcionar.

No Windows, ao usar a opção eventlog em log_destination, deve-se registrar a origem dos eventos e a biblioteca no sistema operacional, para que o Visualizador de eventos do Windows possa mostrar as mensagens de registro de forma limpa. Veja Registro de eventos no Windows para obter detalhes.

logging_collector (boolean) #

Este parâmetro ativa o coletor de registros (logging collector), que é um processo em segundo plano que captura as mensagens de registro enviadas para stderr, e as redireciona para os arquivos de registro. Esta abordagem é geralmente mais útil do que registrar em syslog, porque alguns tipos de mensagens podem não aparecer na saída do syslog. (Um exemplo comum são as mensagens de falha do vinculador dinâmico; outra são as mensagens de erro produzidas por scripts como archive_command.) Este parâmetro só pode ser definido na ativação do servidor.

Nota

É possível escrever na saída de erro padrão (stderr) sem usar o coletor de registros; as mensagens de registro vão apenas para onde a stderr do servidor for direcionada. No entanto, este método é adequado apenas para volumes de registro baixos, porque não fornece uma maneira conveniente de rotacionar os arquivos de registro. Além disso, em algumas plataformas, não usar o coletor de registros pode resultar em saída de registro perdida ou distorcida, porque vários processos que escrevem simultaneamente no mesmo arquivo de registro podem sobrescrever a saída uns dos outros.

Nota

O coletor de registros foi projetado para nunca perder mensagens. Isto significa que, em caso de carga extremamente alta, os processos servidores podem ser bloqueados ao tentar enviar mensagens de registro adicionais quando o coletor ficar atrasado. Em contraste, syslog prefere descartar as mensagens se não puder escrevê-las, significando que pode falhar ao registrar algumas mensagens nesses casos, mas não irá bloquear o restante do sistema.

log_directory (string) #

Quando logging_collector está ativo, este parâmetro determina o diretório onde os arquivos de registro serão criados. Pode ser especificado como um caminho absoluto, ou relativo ao diretório de dados da instância. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor. O padrão é log.

log_filename (string) #

Quando logging_collector está ativo, este parâmetro define os nomes dos arquivos de registro criados. Como o valor é tratado como um padrão para a função strftime, então podem ser usados escapes de % para especificar nomes de arquivos que variam no tempo. (Note-se que se houver algum escape % dependente da zona horária, o cálculo será feito na zona especificada por log_timezone.) Os escapes de % com suporte são semelhantes aos listados na especificação da função strftime do Open Group. Note-se que a função strftime do sistema não é usada diretamente, portanto extensões específicas da plataforma (fora do padrão) não funcionam. O padrão é postgresql-%Y-%m-%d_%H%M%S.log.

Se for especificado um nome de arquivo sem escapes, deve-se planejar usar um utilitário de rotação de log para evitar acabar enchendo todo o disco. Nas versões anteriores à 8.4, se não estivesse presente nenhum escape %, o PostgreSQL acrescentaria a hora do momento de criação do novo arquivo de registro, mas isto não é mais o caso.

Se a saída no formato CSV estiver ativa em log_destination, será anexado .csv ao nome do arquivo de registro com data e hora, para criar o nome do arquivo de saída no formato CSV. (Se log_filename terminar em .log, o sufixo será substituído em vez disso.)

log_destination, será anexado .json ao nome do arquivo de registro com data e hora, para criar o nome do arquivo de saída no formato JSON. (Se log_filename terminar em .log, o sufixo será substituído em vez disso.)

Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

log_file_mode (integer) #

Nos sistemas Unix, este parâmetro define as permissões para os arquivos de registro de eventos quando logging_collector está ativo. (No Microsoft Windows este parâmetro é ignorado.) É esperado que o valor do parâmetro seja um modo numérico especificado no formato aceito pelas chamadas de sistema chmod e umask. (Para usar o formato octal habitual, o número deve começar com 0 (zero).)

As permissões padrão são 0600, significando que apenas o usuário dono do servidor pode ler ou escrever os arquivos de registro. A outra configuração comumente útil é 0640, permitindo que membros do grupo dono leiam os arquivos. Note, entretanto, que para usar esta configuração, é necessário alterar log_directory para armazenar os arquivos em algum lugar fora do diretório de dados da instância. Em qualquer caso, não é aconselhável tornar os arquivos de registro legíveis por todos, porque podem conter dados confidenciais.

Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

log_rotation_age (integer) #

Quando logging_collector está ativo, este parâmetro determina o tempo máximo para usar um arquivo de registro individual, após o qual será criado um novo arquivo de registro. Se o valor for especificado sem unidade, será considerado sendo minutos. O padrão é 24 horas. Definir como zero desativa a criação de novos arquivos de registro com base no tempo. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

log_rotation_size (integer) #

Quando logging_collector está ativo, este parâmetro determina o tamanho máximo de um arquivo de registro individual. Após esta quantidade de dados ter sido escrita em um arquivo de registro, será criado um novo arquivo de registro. Se o valor for especificado sem unidade, será considerado sendo quilobytes. O padrão é 10 megabytes. Definir como zero desativa a criação de novos arquivos de registro com base no tamanho. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

log_truncate_on_rotation (boolean) #

Quando logging_collector está ativo, este parâmetro faz com que o PostgreSQL trunque (sobrescreva), em vez de anexar ao arquivo de registro existente com o mesmo nome. Entretanto, o truncamento ocorre somente quando estiver sendo aberto um novo arquivo devido à rotação baseada em tempo, e não durante a ativação do servidor ou rotação baseada em tamanho. Quando este parâmetro não está ativo, os arquivos pré-existentes são anexados em todos os casos. Por exemplo, usar esta configuração em combinação com log_filename definido como postgresql-%H.log, resulta na geração de arquivos de registro de vinte e quatro horas e, em seguida, sobrescrevendo-os ciclicamente. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

Exemplo: para manter 7 dias de registro, um arquivo de registro por dia com os nomes server_log.Mon, server_log.Tue, etc., e sobrescrever automaticamente o registro da semana anterior pelo registro dessa semana, deve-se definir log_filename como server_log.%a, log_truncate_on_rotation como on, e log_rotation_age como 1440 (ou 1d, N. do T.).

Exemplo: para manter 24 horas de registro, um arquivo de registro por hora, mas também alternar antes se o tamanho do arquivo de registro exceder 1 GB, deve-se definir log_filename como server_log.%H%M, log_truncate_on_rotation como on, log_rotation_age como 60, e log_rotation_size como 1000000. Incluir %M em log_filename permite que possa ocorrer qualquer rotação controlada por tamanho para selecionar um nome de arquivo diferente do nome de arquivo inicial da hora.

syslog_facility (enum) #

Quando os registros têm syslog como destino, este parâmetro determina a facilidade do syslog a ser usada. Pode-se escolher entre LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, ou LOCAL7; O padrão é LOCAL0 [128]. Veja também a documentação do daemon syslog do sistema operacional. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

syslog_ident (string) #

Quando os registros têm syslog como destino, este parâmetro determina o nome do programa usado para identificar as mensagens do PostgreSQL nos registros de syslog. O padrão é postgres. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

syslog_sequence_numbers (boolean) #

Quando os registros têm syslog como destino, e este parâmetro está ativo (o padrão), então cada mensagem é prefixada por um número de sequência crescente (tal como [2]). Isto evita a supressão do tipo --- última mensagem repetida N vezes ---, que muitas implementações de syslog fazem por padrão. Nas implementações de syslog mais modernas, a supressão de mensagens repetidas pode ser configurada (por exemplo, $RepeatedMsgReduction em rsyslog), então esta configuração pode não ser necessária. Além disso, pode-se desativar este recurso se realmente for desejado suprimir as mensagens repetidas.

Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

syslog_split_messages (boolean) #

Quando os registros têm syslog como destino, este parâmetro determina como as mensagens são entregues ao syslog. Quando ativo (o padrão), as mensagens são divididas por linhas, e as linhas longas são divididas para caberem em 1.024 bytes, que é um limite de tamanho típico para implementações de syslog tradicionais. Quando inativo, as mensagens de registro do servidor PostgreSQL são entregues ao serviço syslog como estão, cabendo ao serviço syslog lidar com as mensagens potencialmente volumosas.

Se syslog estiver escrevendo em um arquivo de texto, então o efeito será o mesmo de qualquer maneira, sendo melhor deixar a configuração ativa, já que a maioria das implementações de syslog não podem lidar com mensagens grandes, ou precisariam ser especialmente configuradas para lidar com elas. Mas se syslog estiver escrevendo em algum outro meio, poderá ser necessário, ou mais útil, manter as mensagens juntas logicamente.

Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

event_source (string) #

Quando os registros têm um programa para receber registros como destino, este parâmetro determina o nome do programa usado para identificar as mensagens do PostgreSQL no registro. O padrão é PostgreSQL. Este parâmetro só pode ser definido na ativação do servidor.

19.8.2. Quando registrar #

log_min_messages (enum) #

Controla quais níveis de mensagem são escritos no registro do servidor. Os valores válidos são DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, e PANIC. Cada nível inclui todos os níveis que o seguem. Quanto mais alto for o nível, menos mensagens são enviadas para o registro. O padrão é WARNING. Note-se que LOG tem uma classificação diferente aqui do que tem em client_min_messages. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

log_min_error_statement (enum) #

Controla quais instruções SQL que causam uma condição de erro são registradas no registro do servidor. A instrução SQL corrente é incluída na entrada de registro para qualquer mensagem com a severidade especificada, ou maior. Os valores válidos são DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, e PANIC. O padrão é ERROR, significando que instruções que causam erros, mensagens de LOG, erros fatais, ou pânicos, são registradas. Para desativar inteiramente o registro de instruções com falha, deve-se definir este parâmetro como PANIC. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

log_min_duration_statement (integer) #

Faz com que a duração de cada instrução concluída seja registrada, se a instrução for executada por pelo menos a quantidade de tempo especificada. Por exemplo, se for definido como 250ms, então todas as instruções SQL que executam em 250ms ou mais serão registradas. A ativação desse parâmetro pode servir para rastrear consultas não otimizadas nas aplicações. Se o valor for especificado sem unidade, será considerado sendo milissegundos. Definir como zero registra todas as durações das instruções. O valor -1 (o padrão), desativa o registro das durações das instruções. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

Esta opção se sobrepõe a log_min_duration_sample, significando que as consultas com duração superior a esta configuração não estão sujeitas à amostragem, sendo sempre registradas.

Para os clientes que usam protocolo de consulta estendido, as durações das etapas de Analisar (Parse), Vincular (Bind) e Executar (Execute), são registradas de forma independente.

Nota

Ao usar esta opção acompanhada por log_statement, o texto das instruções registradas devido a log_statement não será repetido na mensagem de registro de duração. Se não estiver sendo usado o syslog, é recomendado que se registre o PID ou ID da sessão usando log_line_prefix, para que se possa vincular a mensagem de instrução à mensagem de duração posterior usando o ID do processo ou o ID da sessão.

log_min_duration_sample (integer) #

Ativa amostrar a duração de instruções concluídas, executadas durante pelo menos a quantidade de tempo especificada. Produz o mesmo tipo de entradas de registro que log_min_duration_statement, mas apenas para um subconjunto de instruções executadas, com taxa de amostragem controlada por log_statement_sample_rate. Por exemplo, se for definido como 100ms, então todas as instruções SQL que executam em 100ms, ou mais, serão consideradas para amostragem. A ativação desse parâmetro pode servir quando o tráfego for muito alto para registrar todas as consultas. Se o valor for especificado sem unidade, será considerado sendo milissegundos. Definir como zero amostra todas as durações das instruções. O valor -1 (o padrão), desativa a amostragem das durações das instruções. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

Esta configuração tem prioridade mais baixa que log_min_duration_statement, significando que as instruções com durações superiores a log_min_duration_statement não estão sujeitas a amostragem, sendo sempre registradas.

Outras notas para log_min_duration_statement também se aplicam a esta configuração.

log_statement_sample_rate (floating point) #

Determina a fração de instruções com duração superior a log_min_duration_sample que serão registradas. A amostragem é estocástica, por exemplo, 0,5 significa que há estatisticamente uma chance em duas de que qualquer instrução seja registrada. O padrão é 1.0, o que significa registrar todas as instruções amostradas. Definir como zero desativa o registro de duração de instrução amostrado, o mesmo que definir log_min_duration_sample como -1. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

log_transaction_sample_rate (floating point) #

Define a fração de transações cujas instruções são todas registradas, além das instruções registrados por outros motivos. Se aplica a cada nova transação, independentemente da duração das suas instruções. A amostragem é estocástica, por exemplo, 0.1 significa que há estatisticamente uma chance em dez de que qualquer transação seja registrada. O parâmetro log_transaction_sample_rate pode servir para construir uma amostra de transações. O padrão é 0, significando não registrar instruções de quaisquer transações adicionais. Definir como 1 registra todas as instruções de todas as transações. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

Nota

Como todas as opções de registro de instruções, esta opção pode adicionar uma sobrecarga considerável.

log_startup_progress_interval (integer) #

Define o tempo após o qual o processo de ativação irá registrar uma mensagem sobre uma operação de longa duração ainda em andamento, bem como o intervalo entre mensagens de progresso subsequentes para esta operação. O padrão é 10 segundos. Uma configuração de 0 desativa o recurso. Se este valor for especificado sem unidade, será considerado sendo milissegundos. Esta configuração é aplicada separadamente a cada operação. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

Por exemplo, se a sincronização do diretório de dados levar 25 segundos e, posteriormente, a redefinição de relações não registradas levar 8 segundos, e se esta configuração tiver o valor padrão de 10 segundos, então, mensagens serão registradas para a sincronização do diretório de dados após o processo estar em andamento há 10 segundos e novamente após 20 segundos, mas nada será registrado quanto à reinicialização de relações não registradas no registro.

A Tabela 19.2 explica os níveis de severidade de mensagem usados pelo PostgreSQL. Se a saída de registro for enviada para syslog, ou eventlog no Windows, os níveis de severidade serão convertidos conforme mostrado nesta tabela.

Tabela 19.2. Níveis de severidade da mensagem

SeveridadeUsosyslogeventlog
DEBUG1 .. DEBUG5Fornece informações sucessivamente mais detalhadas para uso dos desenvolvedores.DEBUGINFORMATION
INFOFornece informações solicitadas implicitamente pelo usuário, por exemplo, a saída do comando VACUUM VERBOSE.INFOINFORMATION
NOTICEFornece informações que possam ser úteis para os usuários, por exemplo, o aviso de truncamento de identificadores longos.NOTICEINFORMATION
WARNINGFornece avisos sobre problemas prováveis, por exemplo, COMMIT fora de um bloco de transações.NOTICEWARNING
ERRORInforma o erro que fez com que o comando corrente fosse interrompido.WARNINGERROR
LOGInforma informações de interesse para os administradores, por exemplo, atividade de ponto de verificação.INFOINFORMATION
FATALInforma o erro que fez com que a sessão corrente fosse interrompida.ERRERROR
PANICInforma o erro que fez com que todas as sessões do banco de dados fossem interrompidas.CRITERROR

19.8.3. O que registrar #

Nota

O que se escolhe registrar pode ter implicações de segurança; veja Manutenção de arquivo de registro.

application_name (string) #

O parâmetro application_name pode ser qualquer cadeia de caracteres com menos de NAMEDATALEN caracteres (64 caracteres em uma construção padrão). Normalmente é definido pela aplicação na conexão com o servidor. O nome será mostrado na visão pg_stat_activity, e incluído nas entradas de registro CSV. Também pode ser incluído em entradas de registro regulares por meio do parâmetro log_line_prefix. Somente podem ser usados caracteres ASCII imprimíveis no valor de application_name. Os demais caracteres são substituídos por sequências de escape hexadecimais no estilo C.

debug_print_parse (boolean)
debug_print_rewritten (boolean)
debug_print_plan (boolean) #

Estes parâmetros permitem que sejam produzidas várias saídas de depuração. Quando definidos, mostram a árvore de análise resultante, a saída do reescritor de consultas, ou o plano de execução para cada consulta executada. Estas mensagens são produzidas no nível de mensagem LOG, portanto, por padrão, aparecem no registro do servidor, mas não são enviadas ao cliente. É possível mudar esta situação ajustando client_min_messages e/ou log_min_messages. Estes parâmetros estão inativos por padrão.

debug_pretty_print (boolean) #

Quando definido, debug_pretty_print cria recuos nas mensagens produzidas por debug_print_parse, debug_print_rewrite e debug_print_plan. Resulta em uma saída mais legível, mas muito mais longa do que o formato compacto usado quando está inativo. Está ativo por padrão.

log_autovacuum_min_duration (integer) #

Faz com que cada ação executada pelo autovacuum seja registrada se tiver durado pelo menos o tempo especificado. Definir este valor como zero registra todas as ações do autovacuum. -1 desativa o registro de ações do autovacuum. Se este valor for especificado sem unidade, será considerado sendo milissegundos. Por exemplo, se for definido como 250ms, todas as operações automáticas de vacuum e analyze que levarem 250 ms ou mais para serem executadas serão registradas. Além disso, quando este parâmetro é definido com qualquer valor diferente de -1, será registrada uma mensagem se uma ação de autovacuum for ignorada devido a um bloqueio conflitante ou a uma relação removida simultaneamente. O padrão é 10min. Ativar este parâmetro pode ser útil para monitorar a atividade do autovacuum. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor; mas a configuração pode ser sobreposta para tabelas alterando individualmente os parâmetros de armazenamento da tabela.

log_checkpoints (boolean) #

Faz com que os pontos de verificação e de reinicialização sejam registrados no registro do servidor. São incluídas algumas estatísticas nas mensagens de registro, incluindo o número de buffers escritos e o tempo gasto para escrevê-los. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor. O padrão é on.

log_connections (string) #

Faz com que sejam registrados os aspectos de cada conexão com o servidor. O padrão é uma cadeia de caracteres vazia, '', que desativa todo o registro de conexões. As opções a seguir podem ser especificadas isoladamente ou em uma lista separada por vírgulas:

Tabela 19.3. Opções de registro de conexão

NomeDescrição
receiptRegistra o recebimento de uma conexão.
authentication Registra a identidade original usada por um método de autenticação para identificar o usuário. Geralmente a cadeia de caracteres de identidade corresponde ao nome de usuário do PostgreSQL, mas alguns métodos de autenticação de terceiros podem alterar o identificador de usuário original antes que o servidor o armazene. As falhas de autenticação são sempre registradas, independentemente do valor desta configuração.
authorization Registra a conclusão bem-sucedida da autorização. Neste ponto, a conexão foi estabelecida, mas o processo servidor em segundo plano (backend) ainda não está inteiramente configurado. A mensagem de registro inclui o nome de usuário autorizado, bem como o nome do banco de dados e o nome da aplicação, se aplicável.
setup_durations Registra o tempo gasto no estabelecimento da conexão e na configuração do processo servidor em segundo plano até que a conexão esteja pronta para executar sua primeira consulta. A mensagem de registro inclui três durações: a duração total da configuração (começando quando o processo postmaster aceita a conexão de entrada, e terminando quando a conexão está pronta para consultas); o tempo levado para criar a ramificação do novo processo servidor em segundo plano; e o tempo que levou para autenticar o usuário.
all Um alias de conveniência equivalente a especificar todas as opções. Se for especificado all em uma lista de outras opções, todos os aspectos da conexão serão registrados.

O registro de desconexões é controlado separadamente por log_disconnections.

Para manter a compatibilidade com versões anteriores, on, off, true, false, yes, no, 1 e 0 ainda têm suporte. Os valores positivos equivalem a especificar as opções receipt, authentication e authorization.

Apenas superusuários e usuários com o privilégio SET apropriado podem alterar este parâmetro no início da sessão, e ele não pode ser alterado de forma alguma durante a sessão.

Nota

Alguns programas clientes, como o psql, tentam se conectar duas vezes ao verificar se é necessário usar uma senha; portanto, mensagens duplicadas de conexão recebida não indicam necessariamente um problema.

log_disconnections (boolean) #

Faz com que os encerramentos de sessão sejam registrados. A saída do registro fornece informações semelhantes a log_connections, além da duração da sessão. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar este parâmetro no início da sessão, e ele não pode ser alterado de forma alguma durante a sessão. O padrão é off.

log_duration (boolean) #

Faz com que seja registrada a duração de cada instrução concluída. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

Para os clientes que usam o protocolo de consulta estendido, as durações das etapas de Analisar (Parse), Vincular (Bind) e Executar (Execute) são registradas de forma independente.

Nota

A diferença entre ativar log_duration e definir log_min_duration_statement como zero, é que exceder log_min_duration_statement força o texto da consulta ser registrado, mas esta opção não. Assim, se log_duration estiver definido como on, e log_min_duration_statement tiver um valor positivo, todas as durações serão registradas, mas o texto da consulta será incluído apenas para as instruções que excedam o limite. Este comportamento pode servir para coletar estatísticas em instalações de alta carga.

log_error_verbosity (enum) #

Controla a quantidade de detalhes escritos no registro do servidor para cada mensagem registrada. Os valores válidos são TERSE, DEFAULT, e VERBOSE, cada um adicionando mais campos às mensagens mostradas. TERSE exclui o registro de informações de erro de DETAIL, HINT, QUERY, e CONTEXT. A saída VERBOSE inclui o código de erro SQLSTATE (veja também Códigos de erro do PostgreSQL), o nome do arquivo de código-fonte, o nome da função, e o número da linha que gerou o erro. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

log_hostname (boolean) #

Por padrão, as mensagens de registro de conexão mostram apenas o endereço IP do hospedeiro conectado. Ativar este parâmetro também causa o registro do nome do hospedeiro. Note-se que, dependendo da configuração da resolução do nome do hospedeiro, este parâmetro pode impor uma penalidade de desempenho não desprezível. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

log_line_prefix (string) #

Esta é uma cadeia de caracteres no estilo da função printf, mostrada no início de cada linha de registro. Os caracteres % iniciam sequências de escape, substituídas por informações de status conforme descrito abaixo. Os escapes não reconhecidos são ignorados. Os demais caracteres são copiados diretamente para a linha de registro. Alguns escapes são reconhecidos apenas por processos de sessão, sendo tratados como vazios por processos em segundo plano, como o processo principal do servidor. As informações de status podem ser alinhadas à esquerda ou à direita, especificando um literal numérico após o caractere %, e antes da opção. Um valor negativo faz com que as informações de status sejam preenchidas à direita com espaços à esquerda para fornecer uma largura mínima, enquanto um valor positivo será preenchido à esquerda. O preenchimento pode servir para ajudar a leitura por humanos nos arquivos de registro.

Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor. O padrão é '%m [%p] ', que registra o carimbo de data e hora e o identificador do processo.

EscapeEfeitoSomente sessão
%aNome da aplicaçãosim
%uNome do usuáriosim
%dNome do banco de dadossim
%rNome do hospedeiro remoto, ou endereço IP e porta remotasim
%hNome do hospedeiro remoto, ou endereço IPsim
%LEndereço local (o endereço IP no servidor ao qual o cliente se conectou)sim
%bTipo do processo servidor (back-end)não
%pIdentificador do processonão
%PIdentificador do processo líder do grupo paralelo, se este processo for um processo trabalhador de consulta paralelanão
%tCarimbo de data e hora sem milissegundosnão
%mCarimbo de data e hora com milissegundosnão
%nCarimbo de data e hora com milissegundos (como uma época do Unix)não
%iEtiqueta de comando: tipo do comando corrente da sessãosim
%eCódigo de erro SQLSTATEnão
%cIdentificador da sessão: veja abaixonão
%lNúmero da linha de registro para cada sessão ou processo, começando em 1não
%sCarimbo de data e hora do início do processonão
%vID da transação virtual (procNumber/localXID); veja Transações e identificadoresnão
%xID da transação (0 se nenhum for atribuído); veja Transações e identificadoresnão
%qNão produz saída, mas informa aos processos que não são de sessão para parar neste ponto da cadeia de caracteres; ignorado pelos processos de sessãonão
%QIdentificador de consulta da consulta corrente. Os identificadores de consulta não são calculados por padrão, portanto, este campo será zero, a menos que o parâmetro compute_query_id esteja ativo, ou um módulo de terceiros que calcule identificadores de consulta esteja configurado.sim
%%% literalnão

O tipo de processo servidor corresponde à coluna backend_type na visão pg_stat_activity, mas podem aparecer tipos adicionais no registro que não aparecem nesta visão.

O escape %c imprime um identificador de sessão quase-único, consistindo em dois números hexadecimais de 4 bytes (sem zeros à esquerda) separados por um ponto. Os números são a hora de início do processo e o identificador do processo, então %c também pode ser usado como uma forma de mostrar estes itens com economia de espaço. Por exemplo, para gerar o identificador de sessão de pg_stat_activity, pode-se usar esta consulta:

SELECT to_hex(trunc(EXTRACT(EPOCH FROM backend_start))::integer) || '.' ||
       to_hex(pid)
FROM pg_stat_activity;

Dica

Se for definido um valor não vazio para log_line_prefix, normalmente deverá se fazer com que seu último caractere seja um espaço, para fornecer uma separação visual do resto da linha de registro. Também pode ser usado um caractere de pontuação.

Dica

Syslog produz seu próprio registro de data e hora e informações de identificador de processo, então, provavelmente não será desejado incluir estes escapes se estiver sendo usado o syslog.

Dica

O escape %q é útil ao incluir informações que estão disponíveis apenas no contexto da sessão (processo servidor), como o nome do usuário ou do banco de dados. Por exemplo:

log_line_prefix = '%m [%p] %q%u@%d/%a '

Nota

O escape %Q sempre reporta um identificador zero para linhas produzidas por log_statement, porque log_statement gera a saída antes que o identificador possa ser calculado, incluindo instruções inválidas para as quais o identificador não pode ser calculado.

log_lock_waits (boolean) #

Controla se é produzida uma mensagem de registro quando uma sessão espera mais de deadlock_timeout para adquirir um bloqueio. Serve para determinar se as esperas de bloqueio estão causando baixo desempenho. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

log_lock_failures (boolean) #

Controla se é gerada uma mensagem de registro detalhada quando a aquisição de um bloqueio falha. Isto é útil para analisar as causas de falhas de bloqueio. No momento, apenas falhas de bloqueio devido a SELECT NOWAIT têm suporte. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

log_recovery_conflict_waits (boolean) #

Controla se é produzida uma mensagem de registro quando o processo de ativação aguarda mais do que deadlock_timeout por conflitos de recuperação. Serve para determinar se os conflitos de recuperação impedem a recuperação de aplicar o WAL.

O padrão é off. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

log_parameter_max_length (integer) #

Se for maior que zero, cada valor de parâmetro de ligação (bind) registrado com uma mensagem de registro de instrução sem erro será reduzido para este número de bytes. Zero desativa o registro de parâmetros de ligação para registros de instruções sem erros. O valor -1 (o padrão), permite que os parâmetros de ligação sejam registrados por completo. Se o valor for especificado sem unidade, será considerado sendo bytes. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

Esta configuração afeta apenas mensagens de registro mostradas como resultado de log_statement, log_duration, e configurações relacionadas. Os valores dessa configuração diferentes de zero adicionam alguma sobrecarga, principalmente se os parâmetros forem enviados no formato binário, porque será necessária a conversão para texto.

log_parameter_max_length_on_error (integer) #

Se for maior que zero, cada valor de parâmetro de ligação relatado nas mensagens de erro será reduzido para este número de bytes. Zero (o padrão) desativa a inclusão de parâmetros de ligação em mensagens de erro. O valor -1 permite que os parâmetros de ligação sejam mostrados por completo. Se o valor for especificado sem unidade, será considerado sendo bytes.

Os valores dessa configuração diferentes de zero adicionam sobrecarga, porque o PostgreSQL precisará armazenar as representações textuais dos valores dos parâmetros na memória no início de cada instrução, independentemente de um erro ocorrer ou não. A sobrecarga é maior quando os parâmetros de ligação são enviados no formato binário do que quando são enviados como texto, uma vez que o primeiro caso requer conversão de dados, enquanto o último requer apenas a cópia da cadeia de caracteres.

log_statement (enum) #

Controla quais instruções SQL são registradas. Os valores válidos são none (off), ddl, mod e all (todas as instruções). ddl registra todas as instruções de definição de dados, tais como as instruções CREATE, ALTER e DROP. mod registra todas as instruções de ddl, além das instruções de modificação de dados, tais como as instruções INSERT, UPDATE, DELETE, TRUNCATE e COPY FROM. As instruções PREPARE, EXECUTE e EXPLAIN ANALYZE, também serão registradas, se o comando contido for de um tipo apropriado. Para os clientes que usam o protocolo de consulta estendido, o registro ocorre quando é recebida uma mensagem Execute, e os valores dos parâmetros Bind são incluídos (com quaisquer apóstrofos incorporados duplicados).

O padrão é none. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

Nota

As instruções que contêm erros de sintaxe simples não são registradas, mesmo com a configuração log_statement = all, porque a mensagem de registro é produzida somente após a análise básica ter sido feita para determinar o tipo de instrução. No caso do protocolo de consulta estendido, esta configuração também não registra instruções que falham antes da fase Execute (ou seja, durante a fase de análise ou planejamento). Deve-se definir log_min_error_statement como ERROR (ou inferior) para registrar estas instruções.

As instruções registradas podem revelar dados sensíveis e até mesmo conter senhas em texto puro.

log_replication_commands (boolean) #

Faz com que cada comando de replicação e a aquisição/liberação de encaixe de replicação de cada processo walsender sejam registrados no servidor. Veja Seção 54.4 para obter mais informações sobre o comando de replicação. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

log_temp_files (integer) #

Controla o registro de nomes e tamanhos de arquivos temporários. Os arquivos temporários podem ser criados para classificações, hashes, e resultados de consultas temporárias. Se ativado por esta configuração, uma entrada de registro será produzida para cada arquivo temporário, com o tamanho do arquivo especificado em bytes, quando este for excluído. O valor zero registra todas as informações de arquivos temporários, enquanto valores positivos registram apenas arquivos cujo tamanho é maior ou igual à quantidade de dados especificada. Se o valor for especificado sem unidade, será considerado sendo quilobytes. O padrão é -1, que desativa este registro. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

log_timezone (string) #

Define a zona horária usado para carimbos de data e hora escritos no registro do servidor. Ao contrário de TimeZone, este valor abrange toda a instância, para que todas as sessões relatem carimbos de data e hora de forma homogênea. O padrão integrado é GMT, mas é normalmente sobreposto no arquivo postgresql.conf; O initdb instala uma configuração correspondente ao ambiente do sistema operacional. Veja Zonas horárias para obter mais informações. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

19.8.4. Uso da saída de registro no formato CSV #

Incluir csvlog na lista log_destination fornece uma maneira conveniente de importar arquivos de registro para uma tabela de banco de dados. Esta opção produz linhas de registro no formato de valores separados por vírgula (CSV), com as seguintes colunas: carimbo de data e hora com milissegundos, nome do usuário, nome do banco de dados, identificador do processo, número do hospedeiro:porta do cliente, identificador da sessão, número de linha por sessão, etiqueta de comando, hora de início da sessão, identificador de transação virtual, identificador de transação regular, severidade do erro, código SQLSTATE, mensagem de erro, detalhe da mensagem de erro, dica, consulta interna que levou ao erro (se houver), o número de caracteres para chegar à posição do erro, contexto do erro, consulta do usuário que levou ao erro (se houver, e ativado por log_min_error_statement), o número de caracteres para chegar à posição do erro, localização do erro no código-fonte do PostgreSQL (se log_error_verbosity estiver definido como verbose), nome da aplicação, tipo de processo servidor, identificador do processo líder do grupo paralelo, e identificador da consulta. A seguir está um exemplo de definição de tabela para armazenar a saída de registro no formato CSV:

CREATE TABLE postgres_log
(
  log_time timestamp(3) with time zone,
  user_name text,
  database_name text,
  process_id integer,
  connection_from text,
  session_id text,
  session_line_num bigint,
  command_tag text,
  session_start_time timestamp with time zone,
  virtual_transaction_id text,
  transaction_id bigint,
  error_severity text,
  sql_state_code text,
  message text,
  detail text,
  hint text,
  internal_query text,
  internal_query_pos integer,
  context text,
  query text,
  query_pos integer,
  location text,
  application_name text,
  backend_type text,
  leader_pid integer,
  query_id bigint,
  PRIMARY KEY (session_id, session_line_num)
);

Para importar um arquivo de registro para esta tabela, pode-se usar o comando COPY FROM:

COPY postgres_log FROM '/caminho/completo/para/logfile.csv' WITH csv;

Também é possível acessar o arquivo como uma tabela estrangeira, usando o módulo file_fdw fornecido.

Há algumas coisas que se precisa fazer para simplificar a importação de arquivos de registro no formato CSV:

  1. Definir log_filename e log_rotation_age para fornecer um esquema de nomes consistente e previsível para os arquivos de registro. Isto permite prever qual será o nome do arquivo, e saber quando um arquivo de registro individual estará completo e, portanto, pronto para ser importado.

  2. Definir log_rotation_size como 0 (zero), para desativar a rotação de registro baseada em tamanho, porque isto dificulta prever o nome do arquivo de registro.

  3. Definir log_truncate_on_rotation como on, para que os dados de registro antigos não sejam misturados com os novos no mesmo arquivo.

  4. A definição da tabela acima inclui uma especificação de chave primária. Isto serve para proteger contra a importação acidental da mesma informação duas vezes. O comando COPY efetiva todos os dados que importa de uma vez, portanto, qualquer erro causará falha de toda a importação. Se for importado um arquivo de registro parcial, e posteriormente importado o arquivo novamente quando estiver concluído, a violação de chave primária causará falha na importação. Deve-se aguardar até que o arquivo de registro esteja concluído e fechado antes de importar. Este procedimento também protege contra a importação acidental de uma linha parcial que não tenha sido inteiramente escrita, o que também causaria falha no COPY.

Exemplo 19.4. Exemplo do tradutor

Uso da saída de registro no formato CSV

Neste exemplo é mostrada a configuração do arquivo postgresql.conf para produzir registros no formato CSV, depois é criada a tabela postgres_log, conforme visto acima, carregada com o primeiro arquivo gerado após a ativação do servidor e mostrada suas primeiras 7 linhas. Foi usado o PostgreSQL 18 instalado através de comandos apt-get install no sistema operacional Debian 12.

$ sudo su - postgres
$ nano /etc/postgresql/18/main/postgresql.conf
log_destination = 'csvlog'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.csv'
log_file_mode = 0600
log_rotation_age = 1d
log_rotation_size = 0
log_truncate_on_rotation = on
log_min_messages = warning
log_min_error_statement = error
log_min_duration_statement = 0
log_checkpoints = on
log_disconnections = on
log_statement = 'all'
log_timezone = 'America/Sao_Paulo'
$ systemctl restart postgresql
$ psql
psql (18.4 (Debian 18.4-1.pgdg12+1))
Digite "help" para obter ajuda.

postgres=# CREATE TABLE postgres_log ...  -- visto acima
CREATE TABLE
postgres=# COPY postgres_log
FROM '/var/lib/postgresql/18/main/log/postgresql-2026-07-08_063012.csv'
WITH csv;
COPY 39
postgres=# SELECT log_time, message FROM postgres_log LIMIT 7\gx
-[ RECORD 1 ]----------------------------------------------------------------
log_time | 2026-07-08 06:30:12.114-03
message  | terminando saída do log para stderr
-[ RECORD 2 ]----------------------------------------------------------------
log_time | 2026-07-08 06:30:12.114-03
message  | iniciando PostgreSQL 18.4 (Debian 18.4-1.pgdg12+1) ↵
           on x86_64-pc-linux-gnu, compiled by gcc ↵
           (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
-[ RECORD 3 ]----------------------------------------------------------------
log_time | 2026-07-08 06:30:12.114-03
message  | escutando no endereço IPv4 "0.0.0.0", porta 5432
-[ RECORD 4 ]----------------------------------------------------------------
log_time | 2026-07-08 06:30:12.114-03
message  | escutando no endereço IPv6 "::", porta 5432
-[ RECORD 5 ]----------------------------------------------------------------
log_time | 2026-07-08 06:30:12.119-03
message  | escutando no soquete Unix "/var/run/postgresql/.s.PGSQL.5432"
-[ RECORD 6 ]----------------------------------------------------------------
log_time | 2026-07-08 06:30:12.152-03
message  | sistema de banco de dados foi desligado em 2026-07-08 06:28:31 -03
-[ RECORD 7 ]----------------------------------------------------------------
log_time | 2026-07-08 06:30:12.163-03
message  | sistema de banco de dados está pronto para aceitar conexões


19.8.5. Uso da saída de registro no formato JSON #

Incluir jsonlog na lista log_destination oferece uma maneira conveniente de importar arquivos de registro para diversos programas. Esta opção gera linhas de registro no formato JSON [129].

Campos de cadeia de caracteres com valores nulos são excluídos da saída. No futuro poderão ser adicionados mais campos. Aplicações de usuário que processem a saída de jsonlog devem ignorar campos desconhecidos.

Cada linha de registro é serializada como um objeto JSON com o conjunto de chaves e seus valores associados mostrados na Tabela 19.4.

Tabela 19.4. Chaves e valores de entradas de registro JSON

Nome da chaveTipoDescrição
timestampcadeia de caracteresCarimbo de data e hora com milissegundos
usercadeia de caracteresNome do usuário
dbnamecadeia de caracteresNome do banco de dados
pidnúmeroID do processo
remote_hostcadeia de caracteresHospedeiro cliente
remote_portnúmeroPorta do cliente
session_idcadeia de caracteresID da sessão
line_numnúmeroNúmero da linha por sessão
pscadeia de caracteresExibição atual do ps
session_startcadeia de caracteresHora de início da sessão
vxidcadeia de caracteresID da transação virtual
txidcadeia de caracteresID da transação regular
error_severitycadeia de caracteresGravidade do erro
state_codecadeia de caracteresCódigo SQLSTATE
messagecadeia de caracteresMensagem de erro
detailcadeia de caracteresDetalhes da mensagem de erro
hintcadeia de caracteresDica da mensagem de erro
internal_querycadeia de caracteresConsulta interna que causou o erro
internal_positionnúmeroÍndice do cursor na consulta interna
contextcadeia de caracteresContexto do erro
statementcadeia de caracteresCadeia de caracteres da consulta fornecida pelo cliente
cursor_positionnúmeroÍndice do cursor na cadeia de caracteres da consulta
func_namecadeia de caracteresNome da função onde ocorreu o erro
file_namecadeia de caracteresNome do arquivo do local do erro
file_line_numnúmeroNúmero da linha do arquivo onde ocorreu o erro
application_namecadeia de caracteresNome da aplicação cliente
backend_typecadeia de caracteresTipo do processo servidor
leader_pidnúmeroID do processo do líder para trabalhadores paralelos ativos
query_idnúmeroQuery ID

Exemplo 19.5. Exemplo do tradutor

Uso da saída de registro no formato JSON

Este exemplo é idêntico ao anterior para o formato CSV, só que para o formato JSON.

$ sudo su - postgres
$ nano /etc/postgresql/18/main/postgresql.conf
log_destination = 'csvlog,jsonlog'
$ systemctl restart postgresql
$ ls -l /var/lib/postgresql/18/main/log/
total 24
-rw------- 1 postgres postgres  6269 jul  8 14:21 postgresql-2026-07-08_142114.csv
-rw------- 1 postgres postgres 10522 jul  8 14:21 postgresql-2026-07-08_142114.json
-rw------- 1 postgres postgres   180 jul  8 14:21 postgresql-2026-07-08_142114.log
$ cat /var/lib/postgresql/18/main/log/postgresql-2026-07-08_142114.log
2026-07-08 14:21:14.122 -03 [20663] LOG:  terminando saída do log para stderr
2026-07-08 14:21:14.122 -03 [20663] DICA:  Saída futura do log será enviada para "csvlog,jsonlog".
$ psql
psql (18.4 (Debian 18.4-1.pgdg12+1))
Digite "help" para obter ajuda.

postgres=# CREATE TABLE postgres_jsonlog (
    log_line jsonb
);
CREATE TABLE
postgres=# COPY postgres_jsonlog (log_line)
FROM '/var/lib/postgresql/18/main/log/postgresql-2026-07-08_142114.json'
csv quote e'\x01' delimiter e'\x02';
COPY 37
postgres=# SELECT log_line->>'timestamp' AS timestamp,
log_line->>'message' AS message
FROM postgres_jsonlog LIMIT 7\gx
-[ RECORD 1 ]-----------------------------------------------------------------
timestamp | 2026-07-08 14:21:14.122 -03
message   | terminando saída do log para stderr
-[ RECORD 2 ]-----------------------------------------------------------------
timestamp | 2026-07-08 14:21:14.122 -03
message   | iniciando PostgreSQL 18.4 (Debian 18.4-1.pgdg12+1) ↵
            on x86_64-pc-linux-gnu, compiled by gcc ↵
            (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
-[ RECORD 3 ]-----------------------------------------------------------------
timestamp | 2026-07-08 14:21:14.122 -03
message   | escutando no endereço IPv4 "0.0.0.0", porta 5432
-[ RECORD 4 ]-----------------------------------------------------------------
timestamp | 2026-07-08 14:21:14.122 -03
message   | escutando no endereço IPv6 "::", porta 5432
-[ RECORD 5 ]-----------------------------------------------------------------
timestamp | 2026-07-08 14:21:14.126 -03
message   | escutando no soquete Unix "/var/run/postgresql/.s.PGSQL.5432"
-[ RECORD 6 ]-----------------------------------------------------------------
timestamp | 2026-07-08 14:21:14.138 -03
message   | sistema de banco de dados foi desligado em 2026-07-08 14:21:13 -03
-[ RECORD 7 ]-----------------------------------------------------------------
timestamp | 2026-07-08 14:21:14.149 -03
message   | sistema de banco de dados está pronto para aceitar conexões


19.8.6. Título do processo #

Estas configurações controlam como os títulos dos processos servidores são modificados. Os títulos dos processos são normalmente vistos usando programas como o ps no Unix, ou o Gerenciador de Processos no Windows. Veja Ferramentas padrão do Unix para obter detalhes.

cluster_name (string) #

Define um nome que identifica este agrupamento de bancos de dados (instância) para diversas finalidades. O nome da instância aparece no título do processo para todos os processos servidores nesta instância. Além disso, é o nome padrão da aplicação para uma conexão em espera (veja synchronous_standby_names.)

O nome pode ser qualquer sequência de caracteres com menos de NAMEDATALEN caracteres (64 caracteres em uma construção padrão). Apenas caracteres ASCII imprimíveis podem ser usados ​​no valor de cluster_name. Os demais caracteres são substituídos por sequências de escape hexadecimais no estilo C. Nenhum nome será mostrado se este parâmetro for definido como uma cadeia de caracteres vazia '' (o padrão). Este parâmetro só pode ser definido na ativação do servidor.

update_process_title (boolean) #

O nome pode ser qualquer cadeia de caracteres com menos de NAMEDATALEN caracteres (64 caracteres em uma construção padrão). Somente podem ser usados caracteres ASCII imprimíveis no valor cluster_name. Os demais caracteres são substituídos por pontos de interrogação (?). Nenhum nome será mostrado se este parâmetro estiver definido como uma cadeia de caracteres vazia '' (o padrão). Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.



[129] Para ler um arquivo JSON contendo aspas (") incorporadas, as aspas internas devem ser precedidas por contrabarras (\"), ou pré-processadas para corrigir a formatação. Como muitas mensagens de registro contém aspas internas não precedidas por contrabarra, acabam acontecendo erros do tipo sintaxe de entrada inválida para o tipo de dados json como, por exemplo Token "csvlog" is invalid. Veja Importing JSON data (N. T.)