Apache Log4j é um utilitário de log baseado em Java originalmente escrito por Ceki Gülcü. Faz parte do Apache Logging Services , um projeto da Apache Software Foundation . Log4j é uma das várias estruturas de log Java .
Desde então, a Gülcü iniciou os projetos SLF4J , reload4j e Logback , com a intenção de oferecer um sucessor ao Log4j.
A equipa do Apache Log4j desenvolveu o Log4j 2 em resposta aos problemas do Log4j 1.2, 1.3 java.util.logginge Logback, abordando problemas que apareciam nesses frameworks. Além disso, o Log4j 2 oferecia uma arquitetura de plugin que o torna mais extensível que seu antecessor. Log4j 2 não é compatível com versões 1.x, embora um “adaptador” esteja disponível. Em 5 de agosto de 2015, o Apache Logging Services Project Management Committee anunciou que o Log4j 1 havia chegado ao fim da vida útil e que os usuários do Log4j 1 foram aconselhados a atualizar para o Apache Log4j 2. Em 12 de janeiro de 2022, reload4j versão 1.2.18.0 foi anunciada com o objetivo de corrigir os problemas mais urgentes no log4j 1.2.17 e um caminho de migração fácil.
Em 9 de dezembro de 2021, uma vulnerabilidade de dia zero envolvendo execução arbitrária de código no Log4j 2 foi publicada pela Alibaba Cloud Security Team e recebeu o descritor ” Log4Shell “. Ela foi caracterizada pela Tenable como “a maior e mais crítica vulnerabilidade da última década”.
Apache Log4j 2
O Apache Log4j 2 é o sucessor do Log4j 1 que foi lançado como versão GA em julho de 2014. A estrutura foi reescrita do zero e foi inspirada em soluções de log existentes, incluindo Log4j 1 e java.util.logging. As principais diferenças do Log4j 1 são:
- Confiabilidade melhorada. As mensagens não são perdidas ao reconfigurar a estrutura como em Log4j 1 ou Logback
- Extensibilidade: Log4j 2 suporta um sistema de plugin para permitir que os utilizadores definam e configurem componentes personalizados
- Sintaxe de configuração simplificada
- Suporte para configurações de xml, json, yaml e propriedades
- Filtros aprimorados
- Suporte de pesquisa de propriedade para valores definidos no arquivo de configuração, propriedades do sistema, variáveis de ambiente, o ThreadContext Map e dados presentes no evento
- Suporte para várias APIs: Log4j 2 pode ser usado com aplicativos usando as APIs Log4j 2, Log4j 1.2, SLF4J, Commons Logging e java.util.logging (JUL).
- Níveis de registoo personalizados
- Suporte lambda no estilo Java 8 para “registro lento”
- Marcadores
- Suporte para objetos Message definidos pelo usuário
- “Livre de lixo ou baixo lixo” em configurações comuns
- Velocidade melhorada
- Suporte aprimorado para Linux
Uma das características mais reconhecidas do Log4j 2 é o desempenho dos “Asynchronous Loggers”. Log4j 2 faz uso do Disruptor LMAX . A biblioteca reduz a necessidade de bloqueio do kernel e aumenta o desempenho de log em um fator de 12. Por exemplo, no mesmo ambiente Log4j 2 pode escrever mais de 18.000.000 mensagens por segundo, enquanto outros frameworks como Logback e Log4j 1 apenas escrevem < 2.000.000 mensagens por segundo.
Características
Níveis de log do Log4j
A tabela a seguir define os níveis de log integrados e as mensagens no Log4j, em ordem decrescente de gravidade. A coluna da esquerda lista a designação do nível de log no Log4j e a coluna da direita fornece uma breve descrição de cada nível de log.
Nível | Descrição |
---|---|
OFF | A classificação mais alta possível e destina-se a desativar o registo. |
FATAL | Erros graves que causam encerramento prematuro. Espere que eles sejam imediatamente visíveis numa consola de status. |
ERROR | Outros erros de tempo de execução ou condições inesperadas. Espere que eles sejam imediatamente visíveis numa consola de status. |
WARN | Uso de APIs obsoletas, uso inadequado de API, erros ‘quase’, outras situações de tempo de execução indesejáveis ou inesperadas, mas não necessariamente “erradas”. Espere que eles sejam imediatamente visíveis em um console de status. |
INFO | Eventos de tempo de execução interessantes (inicialização/desligar). Espere que eles sejam imediatamente visíveis numa consola, então seja conservador e reduza ao mínimo. |
DEBUG | Informações detalhadas sobre o fluxo através do sistema. Espere que eles sejam gravados apenas em logs. De um modo geral, a maioria das linhas registadas pelo seu aplicativo deve ser escrita como DEBUG. |
TRACE | Informações mais detalhadas. Espere que eles sejam gravados apenas em logs. Desde a versão 1.2.12. |
Níveis de registo personalizados
O Log4j 2 permite que os utilizadores definam seus próprios níveis de log. Uma ferramenta geradora de código-fonte é fornecida para criar Loggers que suportam níveis de log personalizados de forma idêntica aos níveis de log integrados. Os níveis de log personalizados podem complementar ou substituir os níveis de log integrados.
Configuração do Log4j
O Log4j pode ser configurado através de um arquivo de configuração ou através de código Java. Os arquivos de configuração podem ser escritos em XML , JSON , YAML ou no formato de arquivo de propriedades . Dentro de uma configuração, você pode definir três componentes principais: Loggers, Appenders e Layouts. Configurar o log por meio de um arquivo tem a vantagem de que o log pode ser ativado ou desativado sem modificar o aplicativo que usa o Log4j. O aplicativo pode ser executado com logoff até que haja um problema, por exemplo, e então o log pode ser reativado simplesmente modificando o arquivo de configuração.
Os registadores são destinos de mensagens de log nomeados. Eles são os nomes que são conhecidos pelo aplicativo Java. Cada registador é configurável de forma independente quanto ao nível de registro (FATAL, ERRO, etc.) que ele regista atualmente. Nas primeiras versões do Log4j, eles eram chamados de categoria e prioridade, mas agora são chamados de registador e nível, respectivamente. Um Logger pode enviar mensagens de log para vários Appenders.
As saídas reais são feitas por Appenders . Existem vários Appenders disponíveis, com nomes descritivos, como FileAppender, RollingFileAppender, ConsoleAppender, SocketAppender, SyslogAppender e SMTPAppender. O Log4j 2 adicionou Appenders que gravam no Apache Flume , a API Java Persistence , Apache Kafka , bancos de dados NoSQL , arquivos mapeados em memória , arquivos de acesso aleatório e endpoints ZeroMQ . Vários Appenders podem ser anexados a qualquer Logger, portanto é possível registar as mesmas informações em várias saídas; por exemplo, para um arquivo localmente e para um socket ouvinte em outro computador.
Anexadores usam Layouts para formatar entradas de log. Uma maneira popular de formatar arquivos de log de uma linha por vez é o PatternLayout, que usa uma string de padrão, muito parecida com a função printf do C / C++ . Há também formatadores HTMLLayout e XMLLayout para uso quando os formatos HTML ou XML são mais convenientes, respectivamente. Log4j 2 adicionados Layouts para CSV , Graylog Extended Log Format (GELF), JSON , YAML e RFC-5424.
No Log4j 2, Filtros podem ser definidos em elementos de configuração para fornecer um controle mais refinado sobre quais entradas de log devem ser processadas por quais Loggers e Appenders. Além de filtrar por nível de log e correspondência de expressão regular na string de mensagem, o Log4j 2 adicionou filtros de intermitência, filtros de tempo, filtragem por outros atributos de evento de log, como Markers ou Thread Context Map e filtros de script JSR 223 .
Para depurar uma configuração com mau comportamento:
- Nas configurações do Log4j 2, defina o
status
atributo como TRACE para enviar a saída de log de status interno para saída padrão . Para ativar o log de status antes que a configuração seja localizada, use a propriedade Java VM-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace
. - No Log4j 1, use a propriedade Java VM
-Dlog4j.debug
.
Para descobrir onde um arquivo de configuração log4j2.xml foi carregado,inspecione getClass().getResource("/log4j2.xml")
.
Há também uma configuração implícita “não configurada” ou “padrão” do Log4j, a de um aplicativo Java instrumentado pelo Log4j que não possui qualquer configuração do Log4j. Isso imprime para stdout um aviso de que o programa está desconfigurado e a URL para o site Log4j onde os detalhes sobre o aviso e a configuração podem ser encontrados. Além de imprimir este aviso, um aplicativo Log4j não configurado imprimirá apenas entradas de log ERROR ou FATAL para saída padrão.
Exemplo para Log4j 2
<?xml version="1.0" encoding="UTF-8"?> <Configuration status= "trace" monitorInterval= "60" > <Properties> <Property name= "filename" > target/test.log </Property> </Propriedades> <Appenders> <Console name= "STDOUT" > <PatternLayout pattern= "%d %p %c{1.} [%t] %m%n" /> </Console> <File name= "file" fileName= "${filename}" > <PatternLayout> <pattern> %d %p %c{1.} [%t] %m%n </pattern> </PatternLayout> </ Arquivo> </Appenders> <Loggers> <!-- loggers cujo nome começa com 'org.springframework' somente registrarão mensagens de nível "info" ou superior; se você recuperar Loggers usando o nome da classe (por exemplo, Logger.getLogger(AClass.class)) e se AClass for parte do pacote org.springframework, ele pertencerá a esta categoria --> <Logger name= "org.springframework" level= "info" aditividade= "falso" /> <!-- Exemplo de filtro: para loggers cujo nome comece com 'com.mycompany.myproduct', entradas de log de nível "debug" ou superior cujos dados ThreadContextMap contenham o par de valores-chave "test=123", também envie essas entradas de log para o anexo "STDOUT". --> <Logger name= "com.mycompany.myproduct" level= "debug" additivity= "true" > <ThreadContextMapFilter> <KeyValuePair key= "test" value= "123" /> </ThreadContextMapFilter> <AppenderRef ref= "STDOUT" <!-- Por padrão, todas as mensagens de log de nível "trace" ou superior serão registradas. As mensagens de log são enviadas para o anexador "arquivo" e as mensagens de log de nível "erro" e superior serão enviadas para o anexador "STDOUT". --> <Root level= "trace" > <AppenderRef ref= "file" /> <AppenderRef ref= "STDOUT" level= "error" /> </Root> </Loggers> </Configuração>
Exemplo para Log4j 1.2
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache /log4j/xml/doc-files/log4j.dtd"> <log4j:configuration> <!-- um appender é um destino de saída, como o console ou um arquivo; nomes de anexos são escolhidos arbitrariamente. --> <appender name= "stdout" class= "org.apache.log4j.ConsoleAppender" > <layout class= "org.apache.log4j.PatternLayout" > <param name= "ConversionPattern" value= " </appender> <!-- loggers da categoria 'org.springframework' somente registrarão mensagens de nível "info" ou superior; se você recuperar Loggers usando o nome da classe (por exemplo, Logger.getLogger(AClass.class)) e se AClass for parte do pacote org.springframework, ele pertencerá a esta categoria --> <logger name= "org.springframework" > <level value= "info" /> </logger> <!-- tudo do spring foi definido como "info", mas para a classe PropertyEditorRegistrySupport queremos log de "depuração" --> <logger name= "org.springframework.beans.PropertyEditorRegistrySupport" > <level value= "debug" /> < /registrador> <logger name= "org.acegisecurity" > <level value= "info" /> </logger> <root> <!-- todas as mensagens de log de nível "debug" ou superior serão registradas, a menos que definido de outra forma todas as mensagens de log serão registradas no appender "stdout", a menos que definido de outra forma --> <level value= "debug" /> <appender-ref ref= "stdout" /> </root> </log4j:configuration>
TTCC
TTCC é um formato de mensagem usado pelo log4j. TTCC é um acrônimo para Time Thread Category Component . Ele usa o seguinte padrão:
%r [%t] %-5p %c %x - %m%n
Onde
Mnemônico | Descrição |
---|---|
%r | Usado para gerar o número de milissegundos decorridos desde a construção do layout até a criação do evento de registo. |
%t | Usado para gerar o nome do encadeamento que gerou o evento de log. |
%p | Usado para gerar a prioridade do evento de registo. |
%c | Usado para gerar a categoria do evento de registo. |
%x | Usado para gerar o NDC (contexto de diagnóstico aninhado) associado ao thread que gerou o evento de log. |
%X{chave} | Usado para gerar o MDC (contexto de diagnóstico mapeado) associado ao thread que gerou o evento de log para a chave especificada. |
%m | Usado para gerar a mensagem fornecida pelo aplicativo associada ao evento de registo. |
%n | Usado para gerar o caractere ou caracteres de nova linha específicos da plataforma. |
Exemplo de saída
467 [main] INFO org.apache.log4j.examples.Sort – Saindo do método principal.
Portas
- log4c – Uma porta para C. Log4C é uma biblioteca de log baseada em C , lançada no SourceForge sob a licença LGPL . Para vários sistemas operacionais Unix , os arquivos autoconf e automake são fornecidos. No Windows , um Makefile é fornecido para uso com MSVC . Os programadores também podem optar por usar seu próprio sistema make para compilar a fonte, dependendo de seus requisitos de engenharia de construção. Uma instância da biblioteca log4c pode ser configurada por meio de três métodos: usando variáveis de ambiente , programaticamente ou via arquivo de configuração XML . O log4c possui anexos para arquivos, fluxos e arquivos mapeados na memória. (Sem adaptador de socket.) A última versão é 1.2.4, lançada em 2013, e o projeto não é mais desenvolvido ativamente.
- log4js – Uma porta para JavaScript . O Log4js está disponível sob a licença da Apache Software Foundation . Um recurso especial do Log4js é a capacidade de registrar os eventos do navegador remotamente no servidor. Usando Ajax é possível enviar os eventos de logging em diversos formatos ( XML , JSON , ASCII simples , etc.) Os seguintes anexadores são implementados para log4js : AjaxAppender, ConsoleAppender, FileAppender, JSConsoleAppender, MetatagAppender e WindowsEventsAppender. As seguintes classes de layout são fornecidas: BasicLayout, HtmlLayout, JSONLayout e XMLLayout. Versão mais recente a partir de 2021 era 2.0 de 18 de outubro de 2018.
- log4javascript – Outra porta para JavaScript. log4javascript é uma estrutura de log JavaScript baseada no log4j . A versão mais recente de 2021 era 1.4.13, lançada em 23 de maio de 2015.
- JSNLog – Uma porta para JavaScript . Coloca automaticamente mensagens de registadores JavaScript em logs do lado do servidor usando um componente do lado do servidor .NET que faz interface com Log4Net, NLog, Elmah ou Common.Logging. Isso para fornecer um log integrado para eventos do lado do cliente e do servidor. Os IDs de solicitação correlacionam eventos relacionados a um utilizador específico. A configuração é feita por meio de um arquivo web.config do lado do servidor. Suporta log de exceção, incluindo rastreamentos de pilha. A partir de 2021 , a versão mais recente era 3.0.0 e as atualizações eram feitas regularmente.
- Apache Log4net – Uma porta para o Microsoft .NET Framework . O trabalho inicial foi feito pela Neoworks e foi doado à Apache Software Foundation em fevereiro de 2004. A estrutura é semelhante ao log4j original, aproveitando os novos recursos no tempo de execução .NET. Fornece contexto de diagnóstico aninhado (NDC) e contexto de diagnóstico mapeado (MDC). A versão mais recente em 2021 era 2.0.13.
- log4perl – Uma porta Perl de log4j. A versão 1.49 de fevereiro de 2017 era atual em 2021 .
- Apache log4php – “Um framework de log versátil para PHP . Originalmente uma porta do Apache log4j para PHP, ele cresceu para incluir vários recursos específicos do PHP.”
- PL-SQL-Logging-Utility é uma adaptação do log4j em PL/SQL.
- Log4db2 é um utilitário de log para DB2 para LUW que usa instruções SQL com código SQL PL.
- Apache Log4cxx – Uma estrutura de log para C++ padronizada após o Apache log4j, que usa o Apache Portable Runtime para a maioria dos códigos específicos da plataforma e deve ser usado em qualquer plataforma suportada pelo APR. Atualmente está em incubação; a versão mais recente é 0.12.1, lançada em 2021.
- Log4r – Uma biblioteca de log abrangente e flexível escrita em Ruby para uso em programas Ruby. Ele foi inspirado e fornece muitos dos recursos do projeto Apache Log4j.
Vulnerabilidade do Log4Shell
Uma vulnerabilidade de dia zero envolvendo execução remota de código no Log4j 2, dado o descritor “Log4Shell” ( CVE -2021-44228), foi encontrada e relatada ao Apache pelo Alibaba em 24 de novembro de 2021 e publicada num tweet em 9 de dezembro de 2021. Os serviços afetados incluem Cloudflare , iCloud , Minecraft: Java Edition , Steam , Tencent QQ e Twitter . A Apache Software Foundation atribuiu o CVSS máximo de classificação de gravidade de 10 para Log4Shell, pois milhões de servidores podem ser potencialmente vulneráveis à exploração. A vulnerabilidade foi caracterizada pela empresa de segurança cibernética Tenable como “a maior e mais crítica vulnerabilidade da última década” e a Free Wortley da Lunasec a caracterizou como “uma falha de design de proporções catastróficas”.
Nos Estados Unidos, a diretora da Agência de Segurança Cibernética e Infraestrutura (CISA), Jen Easterly , classificou a exploração como “crítica” e aconselhou os fornecedores a priorizar atualizações de software, e a agência alemã Federal Office for Information Security (BSI) designou a exploração como estando em seu nível de ameaça mais alto, chamando-a de “situação de ameaça extremamente crítica” (traduzido). O Centro Canadiano de Segurança Cibernética (CCCS) pediu às organizações que tomem medidas imediatas.
O recurso que causa a vulnerabilidade pode ser desabilitado com uma definição de configuração, que foi removida no Log4j versão 2.15.0-rc1 (lançada oficialmente em 6 de dezembro de 2021, três dias antes da publicação da vulnerabilidade) e substituída por vários configurações que restringem pesquisas remotas, mitigando assim a vulnerabilidade. Para segurança adicional, todos os recursos usando JNDI , no qual esta vulnerabilidade foi baseada, serão desabilitados por padrão, e o suporte para pesquisas de mensagens será removido da versão 2.16.0 em diante.
O lançador oficial do Minecraft: Java Edition teve essa vulnerabilidade corrigida. O uso de lançadores personalizados ou versões java personalizadas pode significar que o cliente não foi corrigido. Jogar em servidores que não tenham essa vulnerabilidade corrigida permitirá que qualquer jogador no servidor execute código potencialmente mal-intencionado no computador de outro cliente. Jogar single player ou multiplayer em versões acima de 1.18.1 evitará essa vulnerabilidade. As versões abaixo de 1.7 não são afetadas. Os hosts do servidor de jogos devem corrigir especificamente seus servidores se estiverem executando as versões 1.7-1.18, caso contrário, qualquer jogador poderá usar essa vulnerabilidade.
![]() | |
Desenvolvedor(es) | Fundação de Software Apache |
---|---|
lançamento inicial | 8 de janeiro de 2001 |
Versão estável | 2.17.1 / 28 de dezembro de 2021 |
Repositório | github |
Escrito em | Java |
Sistema operacional | Multiplataforma |
Modelo | Logging |
Licença | Licença Apache 2.0 |
Local na rede Internet | logging |
References
- ^ “Apache Log4j 1.2 Release History”. apache.org. Apache Software Foundation. Retrieved September 2, 2014.
- ^ https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.17.1; publication date: 28 December 2021; retrieved: 29 December 2021.
- ^ “Log4j – Changes – Apache Log4j 2”. apache.org. Apache Software Foundation. Retrieved December 18, 2021.
- ^ “Reload4j Home”. reload4j.qos.ch. Retrieved January 12, 2022.
- ^ “Logback Home”. Logback.qos.ch. Retrieved July 24, 2014.
- ^ “Log4j 2 Guide – Apache Log4j 2”. Logging.apache.org. July 12, 2014. Retrieved July 24, 2014.
- ^ Goers, Ralph (December 15, 2019). “Why was Log4j 2 created?”. Ralph Goers.
- ^ “Log4j 2 Guide – Apache Log4j 2: News”. Logging.apache.org. July 12, 2014. Retrieved July 24, 2014.
- ^ “Apache Logging Services Project Announces Log4j 1 End-Of-Life; Recommends Upgrade to Log4j 2”. blogs.apache.org. August 5, 2015. Retrieved July 3, 2016.
- ^ “Reload4j Project; Easy migration from log4j 1.2.x”. qos.ch. January 12, 2022. Retrieved January 12, 2022.
- ^ “What’s the Deal with the Log4Shell Security Nightmare?”. Lawfare. December 10, 2021.
- ^ “Recently uncovered software flaw ‘most critical vulnerability of the last decade‘“. the Guardian. Associated Press. December 11, 2021.
- ^ “The new log4j 2.0”. Grobmeier.de. December 5, 2012. Retrieved July 24, 2014.
- ^ “Log4j – Overview – Apache Log4j 2”. logging.apache.org. June 5, 2016. Retrieved July 3, 2016.
- ^ “Log4j 2 Asynchronous Loggers for Low-Latency Logging – Apache Log4j 2”. Logging.apache.org. July 12, 2014. Retrieved July 24, 2014.
- ^ “Disruptor by LMAX-Exchange”. Lmax-exchange.github.io. Retrieved July 24, 2014.
- ^ “Level (Apache Log4j 1.2.17 API)”. Logging.apache.org. June 9, 2012. Retrieved July 24, 2014.
- ^ “Custom Log Levels”. Logging.apache.org. July 12, 2014. Retrieved July 16, 2016.
- ^ “Configuration”. Logging.apache.org. July 5, 2016. Retrieved July 16, 2016.
- ^ “Architecture”. Logging.apache.org. July 5, 2016. Retrieved July 16, 2016.
- ^ “Appenders”. Logging.apache.org. July 5, 2016. Retrieved July 16, 2016.
- ^ “RandomAccessFile”. docs.oracle.com. July 28, 2011. Retrieved July 16, 2016.
- ^ “Layouts”. Logging.apache.org. July 5, 2016. Retrieved July 16, 2016.
- ^ “GELF”. docs.graylog.org. June 8, 2016. Retrieved July 16, 2016.
- ^ “RFC 5424 – The Syslog Protocol”. tools.ietf.org. March 1, 2009. Retrieved July 16, 2016.
- ^ “Filters”. Logging.apache.org. July 5, 2016. Retrieved July 16, 2016.
- ^ “TTCCLayout (Apache Log4j 1.2.17 API)”. Logging.apache.org. June 9, 2012. Retrieved July 24, 2014.
- ^ “Class NDC”. Archived from the original on August 20, 2007. Retrieved December 11, 2021.
- ^ “MDC (Apache Log4j 1.2.17 API)”. Logging.apache.org. June 9, 2012. Retrieved July 24, 2014.
- ^ “Logging Framework for C | Free System Administration software downloads at”. Sourceforge.net. Retrieved July 24, 2014.
- ^ “stritti/Log4js – The Logging Framework for JavaScript with no runtime dependencies”. GitHub. Retrieved December 11, 2021.
- ^ “a JavaScript logging framework”. log4javascript. Retrieved December 11, 2021.
- ^ “Logging JavaScript errors to your server side log”. JSNLog. Retrieved December 11, 2021.
- ^ “Apache log4net”. Logging.apache.org. Retrieved December 11, 2021.
- ^ Schilli, Mike; Goess, Kevin. “log4perl – log4j for Perl”. log4perl. Retrieved December 11, 2021.
- ^ “Apache Logging Services”. Apache.org. Retrieved March 11, 2015.
- ^ “tmuth/Logger-A-PL-SQL-Logging-Utility — GitHub”. Github.com. Retrieved July 24, 2014.
- ^ “Log4db2 by angoca”. Angoca.github.io. Retrieved July 24, 2014.
- ^ “log4cxx – Changelog”. logging.apache.org.
- ^ “Log4r Manual”. log4r.rubyforge.org. Archived from the original on December 25, 2012. Retrieved April 13, 2017.
- ^ “Security Vulnerability in Minecraft: Java Edition”. Minecraft. December 10, 2021.
- ^ Goodin, Dan (December 9, 2021). “Zeroday in ubiquitous Log4j tool poses a grave threat to the Internet”. Ars Technica. Retrieved December 10, 2021.
- ^ “Worst Apache Log4j RCE Zero day Dropped on Internet”. Cyber Kendra. December 9, 2021. Retrieved December 10, 2021.
- ^ Mott, Nathaniel (December 10, 2021). “Countless Servers Are Vulnerable to Apache Log4j Zero-Day Exploit”. PC Magazine. Retrieved December 10, 2021.
- ^ Newman, Lily Hay (December 10, 2021). “The Internet Is on Fire” – via www.wired.com.
- ^ “Statement from CISA Director Easterly on “Log4j” Vulnerability”. CISA. Washington. December 11, 2021.
- ^ “BSI warnt vor Sicherheitslücke” [BSI warns of security vulnerabilities]. Tagesschau (in German). December 12, 2021.
- ^ “Warnstufe Rot: Schwachstelle Log4Shell führt zu extrem kritischer Bedrohungslage” [Red alarm: Log4Shell vulnerability causes extremely critical threat situation]. BSI press service (in German). December 12, 2021.
- ^ “Statement from the Minister of National Defence on Apache Vulnerability and Call to Canadian Organizations to Take Urgent Action”. Government of Canada. December 12, 2021.
- ^ “LOG4J2-3198: Log4j2 no longer formats lookups in messages by default”. GitHub. December 5, 2021.
- ^ “Restrict LDAP access via JNDI by rgoers · Pull Request #608 · apache/logging-log4j2”. GitHub. 30 November–5 December 2021
- ^ “Apache Log4j Security Vulnerabilities”. December 6, 2021.
- ^ “LOG4J2-3208: Disable JNDI by default”. December 11, 2021. Retrieved December 14, 2021.
- ^ “LOG4J2-3211: Remove support for Lookups in messages”. December 13, 2021. Retrieved December 14, 2021.
- ^ “Important Message: Security vulnerability in Java Edition”. Minecraft.net. December 10, 2021. Retrieved December 30, 2021.
Leitura adicional
- Gülcü, Ceki (fevereiro de 2010), The Complete Log4j Manual (2ª ed.), QOS.ch, p. 204, ISBN 978-2-9700369-0-6
- Gupta, Samudra (22 de junho de 2005), Pro Apache Log4j (2ª ed.), Apress , p. 224, ISBN 978-1-59059-499-5