Com nosso agente Java, você pode obter o logs in context, que permite ver o registro do seu aplicativo no contexto de outros dados New Relic . Para informações gerais sobre este recurso, consulte logs contextualizados APM.
Se você estiver usando um framework suportado, você tem duas opções para configurar o logs contextualizados APM para enviar o log do seu app e vincular os metadados automaticamente ao New Relic. Uma opção é configurar manualmente uma extensão log que irá decorar seu log e então você poderá encaminhá-la para você mesmo. A outra opção é fazer com que o agente Java cuide automaticamente da decoração e do encaminhamento do seu log. A estrutura suportada para logs contextualizados automático inclui:
Log4j1 1.2.17 ou superior
Log4j2 2.6 ou superior
Logback 1.1 ou superior
JUL (java.util.logging) JDK 8+
JBoss Logging 1.3.0.Final a 2.x
Registro do Dropwizard (capturado por meio da instrumentação Logback, consulte o problema abaixo)
Importante
Registro JBoss
O JBoss Logging delega a funcionalidade de decoração local à instrumentação JUL e, portanto, pode ser completamente controlado pelos dois módulos de instrumentação a seguir:
class_transformer:
com.newrelic.instrumentation.java.logging-jdk8:
enabled:true
com.newrelic.instrumentation.jboss.logging:
enabled:true
Importante
Problema conhecido com registro do Dropwizard
Por padrão, o Dropwizard usa Logback para seu backend de registro. Ele também roteia todos os java.util.logging, Log4j e uso do Apache Commons Logging por meio do Logback. Esse comportamento de roteamento pode fazer com que o log duplicado seja relatado ao New Relic se o agente Java instrumento uma dessas outras bibliotecas de log, além do instrumentado Logback.
Para evitar reportar log duplicado ao usar o log do Dropwizard, é recomendado que você desabilite toda a instrumentação framework de log, exceto o Logback. Você pode fazer isso na seção class_transformer do arquivo de configuração do agente:
class_transformer:
com.newrelic.instrumentation.logback-classic-1.2:
enabled:true
com.newrelic.instrumentation.apache-log4j-1:
enabled:false
com.newrelic.instrumentation.apache-log4j-2:
enabled:false
com.newrelic.instrumentation.java.logging-jdk8:
enabled:false
com.newrelic.instrumentation.jboss.logging:
enabled:false
Importante
As versões 7.7.0 e superiores do agente têm esse recurso ativado no arquivo de configuração do agente por padrão.
Agente encaminhamento de logs causará um aumento no consumo de dados quando uma frameworksuportada for detectada. A quantidade depende do aplicativo e da quantidade de log que ele produz. Este recurso pode ser desativado. Consulte Desativar o registro automático para obter mais informações sobre suas opções.
Se você já possui uma solução de encaminhamento de logs instalada, você deve desabilitar este recurso.
Se você preferir usar seu próprio direcionador de logs, em vez de ter o log de encaminhamento do agente Java, então nossa solução de logs contextualizados manual seria a solução certa para decorar seu log com contexto do trace metadados.
Esta é a abordagem mais simples e é uma ótima opção para desenvolvedores que podem não ter acesso ou interesse em configurar um direcionador de logs ou para contas que desejam ver o poder do log e outros metadados de vinculação no contexto de seus aplicativos sem muita sobrecarga.
Tudo o que você precisa fazer é instalar uma versão do agente com recursos de encaminhamento de logs (agente Java 7.6.0 ou superior). Se o encaminhamento estiver desabilitado, você poderá usar esta configuração:
Arquivo de configuração (newrelic.yml), recuado 2 espaços na seção comum:
Depois que esse recurso estiver ativado, você também terá controle sobre o número máximo de linhas de log enviadas ao New Relic a cada minuto. O valor padrão é 10.000. Se mais de 10.000 linhas log forem visualizadas pelo agente em uma janela de 60 segundos, seu log começará a ser amostrado.
Defina-o para um número mais alto para receber mais log. Defina-o para um número menor para receber menos log. Qualquer número inteiro não negativo é válido.
Dica
Refere-se ao número de logs enviados por minuto. Definir max_samples_stored com um valor menor que 12 fará com que nenhum registro seja enviado.
Se você tiver uma solução de encaminhamento de logs existente e estiver atualizando seu agente para usar o logs contextualizados automáticos, certifique-se de disable your manual log forwarder. Caso contrário, seu aplicativo enviará linhas de log duplas. Dependendo da sua conta, isso pode resultar em cobrança dupla. Para obter mais informações, siga os procedimentos para desabilitar seu direcionador de logs específico.
Já tem um encaminhador de logs que você gosta? Estamos protegendo você! O agente Java pode decorar seu log com os metadados de link necessários para fornecer acesso ao recurso automático de log-in-context, e você pode enviá-los para New Relic usando seu manual de direcionamento de logs.
Esta opção não deve ser usada com encaminhamento no agente. Usar um encaminhador de logs externo para enviar log para New Relic enquanto o encaminhamento no agente estiver habilitado fará com que seu log seja enviado duas vezes para New Relic. Dependendo da sua conta, isso pode resultar em cobrança dupla.
Atualize a configuração do seu agente para desabilitar o encaminhamento de logs e habilitar a decoração local, depois reinicie o agente para começar a decorar seu log.
Arquivo de configuração (newrelic.yml), recuado 2 espaços na seção comum:
Nosso decorador adiciona cinco atributos a cada mensagem do log no arquivo de log do aplicativo: entity.guid, hostname, trace.id, span.id e entity.name. Exemplo:
This is my log message. NR-LINKING|{entity.guid}|{hostname}|{trace.id}|{span.id}|{entity.name}|
Se a mensagem do log estiver vazia ou em branco, a mensagem de saída também estará vazia. Exemplo:
Alguns atributos podem ficar vazios se o log ocorreu fora de uma transação ou se não forem aplicáveis ao contexto do seu aplicativo.
Este documento ajudou você na instalação?
Proteja seus dados
Seu registro pode incluir informações confidenciais protegidas pela HIPAA ou outros protocolos de conformidade. Por padrão, ofuscamos padrões numéricos que parecem ser de itens como cartões de crédito ou números de Seguro Social, mas pode ser necessário aplicar hash ou mascarar informações adicionais.
Para mais informações, veja nossa documentação sobre expressão de ofuscação e regras. Você pode aplicar hash ou mascarar seus dados log usando a interface New Relic ou NerdGraph, nossa API GraphQL.
Explore seus dados
Para aproveitar ao máximo seus dados de registro:
Na página Summary doAPM , clique no gráfico Web transaction time para visualizar o registro associado a um momento específico.
Verifique Errors inbox do seu aplicativo para visualizar o registro associado aos seus erros.
Use distributed tracing para ver o log associado ao rastreamento individual.
Normalmente, seu registro começará a aparecer menos de um minuto após você ativar o logs contextualizados. Verifique a seção Triage > Logs do seu aplicativo. Você também começará a ver Padrões de log relacionados ao erro ali.
Se você não vir nenhum log de erros ou rastreamento, talvez não haja nenhum para seu aplicativo. Tente atualizar a página da interface ou altere o período selecionado.
Desabilitar o registro automático
O logs contextualizados APM encaminha automaticamente dados log do agente e é ativado por padrão. Isso pode ter um impacto negativo na segurança, conformidade, faturamento ou desempenho do sistema. Para desativar o registro automático:
No menu do usuário na interface New Relic , clique em Manage your data > Log settings.
Clique no menu de reticências ... no lado direito da linha da conta.
Clique no botão de confirmação para ativar ou desativar e bloquear ou desbloquear o registro automático (contas principais) ou ativar ou desativar apenas (contas infantis).
Para obter mais informações ou se precisar ajustar a configuração padrão, siga os procedimentos para desativar o registro automático.
Opção de logs contextualizados manual
Antes que o agente de linguagem pudesse encaminhar e decorar log, você poderia usar nossas soluções manuais para enviar metadados de links.
Esta opção ainda é suportada, mas não é mais incentivada. Além disso, este método requer que você instale um direcionador de logs antes de ativar o logs contextualizados. Se você não tiver um direcionador de logs, a interface do New Relic prompt que você use nosso agente de infraestrutura.
Se você decidir usar sua solução de encaminhamento de logs existente e posteriormente decidir atualizar seu agente para usar o logs contextualizados automático, certifique-se de disable your manual log forwarder. Caso contrário, seu aplicativo enviará linhas de log duplas. Dependendo da sua conta, isso pode resultar em cobrança dupla. Para obter mais informações, siga os procedimentos para desabilitar seu direcionador de logs específico.
Se você precisar usar o processo manual para configurar o logs contextualizados para Java, siga estas etapas:
Certifique-se de já ter configurado o login no New Relic. Isso inclui a configuração de um encaminhador de logs compatível que coleta seu log do aplicativo e estende os metadados que são encaminhados para New Relic.
Configure o logs contextualizados no Java para enriquecer seus dados log , usando qualquer uma das extensões a seguir, conforme aplicável. Se você usa Spring ou Spring Boot e não tem certeza de qual extensão precisa, consulte nossa documentação do Spring .
Oferecemos uma extensão Dropwizard para logs contextualizados com o agente Java. Para começar, revise o código e um exemplo de aplicativo no GitHub.
Para configurar o logs contextualizados para seu aplicativo Java com a extensão DropWizard:
Certifique-se de ter o pacote Dropwizard 1.3 ou superior instalado e funcionando em seu aplicativo. Use os anexadores originais do Dropwizard e o log de fábrica instalado e funcionando no aplicativo.
Certifique-se de ter o agente Java New Relic versão 5.6.0 ou superior instalado em seu aplicativo e de ter ativado o argumento JVM -javaagent.
Atualize a dependência do seu projeto para incluir a extensão Dropwizard 1.3 conforme aplicável:
Gradle: Adicione o seguinte ao seu arquivo build.gradle :
Maven: Adicione o seguinte ao seu arquivo pom.xml :
<dependencies>
<dependency>
<groupId>com.newrelic.logging</groupId>
<artifactId>dropwizard</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
Atualize seu arquivo de configuração .yaml do Dropwizard com um layout newrelic-json , substituindo o type: console ou type: file usado atualmente por type: newrelic-console ou type: newrelic-file conforme apropriado. Por exemplo:
logging:
appenders:
-type: newrelic-console
# Add the two lines below if you don't have a layout specified on the appender.
# If you have a layout, remove all parameters to the layout and set the type.
layout:
type: newrelic-json
A extensão New Relic Dropwizard também oferece suporte a um tipo de layout log-format que usa o registro padrão do Dropwizard. Para fins de teste, você pode alterar o tipo de layout com uma alteração de uma linha:
logging:
appenders:
-type: newrelic-file
# This format will be ignored by the newrelic-json layout, but used by the log-format layout.
Gradle: Adicione o seguinte ao seu arquivo build.gradle :
dependencies {
implementation("com.newrelic.logging:jul:2.0")
}
Maven: Adicione o seguinte ao seu arquivo pom.xml :
<dependencies>
<dependency>
<groupId>com.newrelic.logging</groupId>
<artifactId>jul</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
Verifique se a propriedade handlers do seu arquivo de registro está definida como algo diferente de NewRelicMemoryHandler. Procure uma linha listando os manipuladores do agente root, assim:
handlers=java.util.logging.FileHandler
Atualize seu arquivo de propriedades de registro para definir o manipulador do agente raiz como NewRelicMemoryHandler para que ele intercepte mensagens destinadas a outro manipulador:
Configure o NewRelicMemoryHandler definindo o destino para o manipulador que foi atribuído anteriormente ao agente root, para que ele capture os dados que New Relic precisa no thread de onde vem a mensagem do log:
Use um NewRelicFormatter para o manipulador final. Atualize seu arquivo de propriedades de criação de log para configurar a propriedade formatter como no exemplo a seguir. Certifique-se de que o manipulador onde você definiu o formatador seja o manipulador target da etapa anterior (java.util.logging.FileHandler neste exemplo).
O formato New Relic Logs é JSON com metadados de telemetria que usamos para correlacionar transações e logs juntos. Atualmente não oferecemos suporte a nenhuma personalização desse formato.
Depois de concluído, JSON é log em vez de texto. O JSON deve ser formatado como objetos únicos, um por linha, e deve conter campos como log.level e thread.name. O trace.id, que é necessário para logs contextualizados, só deve ter valor para mensagem do log que ocorrer dentro de uma transação.
A maneira mais direta de obter as extensões de contexto de login é adicionar essas dependências ao pom.xml do Maven ou ao build.gradle do Gradle. Isso permite que as ferramentas de empacotamento selecionem a dependência correta.
Se não for possível editar esses arquivos, você poderá adicionar os jars diretamente ao aplicativo classpath para a configuração da sua framework de log.
Verifique qual framework de log o aplicativo está usando.
Certifique-se de poder alterar a configuração da sua framework de log.
Adicione os três jars a seguir ao caminho de classe se eles ainda não estiverem presentes. Geralmente, recomendamos usar as versões mais recentes publicadas no Maven Central.
Oferecemos uma extensão Log4j 1.x para logs contextualizados manual com o agente Java. Para começar, revise o código e um exemplo de aplicativo no GitHub.
Para configurar o logs contextualizados manual para seu aplicativo Java com a extensão Log4j 1.x, você deve configurar a extensão Log4j em código ou via XML. Os arquivos de propriedades não são suportados porque a instância AsyncAppender só pode ser configurada automaticamente via XML.
Certifique-se de ter o pacote Log4j 1.x instalado e funcionando no aplicativo.
Certifique-se de ter o agente Java New Relic versão 5.6.0 ou superior instalado em seu aplicativo e de ter ativado o argumento JVM -javaagent.
Atualize a dependência do seu projeto para incluir a extensão Log4j 1.x conforme aplicável.
Gradle: Adicione o seguinte ao seu arquivo build.gradle :
dependencies {
implementation("com.newrelic.logging:log4j1:2.0")
}
Maven: Adicione o seguinte ao seu arquivo pom.xml :
<dependencies>
<dependency>
<groupId>com.newrelic.logging</groupId>
<artifactId>log4j1</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
No arquivo XML de configuração de registro, atualize seu elemento <appender> com um NewRelicLayout, adicionando <layout class="com.newrelic.logging.log4j1.NewRelicLayout"/>:
Se você estiver usando um arquivo de propriedades, altere apenas layout.type:
appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=NewRelicLayout
Se você modificou apenas um anexador existente, pule esta etapa. Se você adicionou um novo anexador, adicione <AppenderRef/> em <Root> para usar este anexador. Use o atributo ref para se referir ao anexador name que você criou na etapa anterior. Por exemplo:
<Rootlevel="info">
<AppenderRefref="MyFile"/>
</Root>
Se você estiver usando um arquivo de propriedades e adicionou um novo anexador, adicione:
Atualize sua configuração de geração de registros xml com o NewRelicAsyncAppender. Para garantir que NewRelicAsyncAppender envolva todos os anexadores que irão direcionar os logs do New Relic, adicione a seção a seguir. Altere "LOG_FILE" para o nome do anexador que você atualizou na etapa anterior.
Certifique-se de que NewRelicAsyncAppender seja o primeiro anexador usado em seu agente. Substitua os anexadores do seu agente raiz pelo anexador ASYNC criado na etapa anterior. Em seguida, liste quaisquer outros anexadores após NewRelicAsyncAppender na lista <root>.
<root>
<appender-refref="ASYNC"/>
</root>
Aqui estão exemplos de um arquivo de registro .xml atualizado para a extensão Logback. Você também pode ver um exemplo prático no GitHub.
Single console appender example
Exemplo de arquivo de configuração após adicionar as informações da extensão de registro:
<!-- Send every message to normal console logging, as well. -->
<appender-refref="STDOUT"/>
</root>
</configuration>
Oferecemos extensões para versões atuais do Spring e Spring Boot. Se você já conhece a biblioteca de log, pode pular diretamente para essa documentação:
Spring implementa uma ponte para outra biblioteca de log que os encontrará automaticamente. No entanto, essas bibliotecas individuais devem ser configuradas e incluídas explicitamente na dependência do seu projeto.
Para identificar sua dependência de log, consulte sua árvore de dependência Gradle, Maven ou outra ferramenta de construção. Em seguida, siga os procedimentos para configurar o logs contextualizados para seu aplicativo Java com essa extensão.