log4j
Apache log4j software | |
---|---|
Genere | Libreria software (non in lista) |
Sviluppatore | Apache Software Foundation |
Ultima versione | 2.24.1 (29 settembre 2024) |
Sistema operativo | Multipiattaforma |
Linguaggio | Java |
Licenza | Apache License 2.0 (licenza libera) |
Sito web | logging.apache.org/log4j/2.x/ |
In informatica Apache log4j è una libreria Java, originariamente scritta da Ceki Gülcü, ora parte del progetto log4j della Apache Software Foundation, uno dei possibili tool per la gestione dei log in ambiente Java insieme a: logback, SLF4J, le API Java per il logging, Apache Common Logging, tinylog ed altri.
Largamente utilizzata in molte applicazioni Java, negli anni il suo sviluppo è stato rallentato ed è divenuta difficile da manutenere a causa della necessità di restare retrocompatibile con versioni molto vecchie di Java. Ha terminato il proprio ciclo di vita nell'agosto 2015 in favore del nuovo progetto log4j 2 (si veda https://logging.apache.org/log4j/2.x/manual/index.html).
Una qualunque applicazione Java necessita di scrivere un log. Al crescere della complessità dell'applicazione, la quantità di messaggi scritti in uno o più log diventa pure complessa. Nel caso limite, possono insorgere problemi di prestazioni dovuti all'accumularsi di un numero di messaggi eccessivo. Log4j e gli altri possibili tool servono a meglio organizzare questo lavoro.
Il 9 dicembre 2021 è stata riportata una vulnerabilità 0-day, chiamata "Log4Shell"[1], che permette l'esecuzione arbitraria di codice in Log4j. Secondo alcuni si tratta della "singola vulnerabilità più grossa e più critica dell'ultimo decennio"[2].
Livelli di log
[modifica | modifica wikitesto]La seguente tabella definisce i livelli dei log e i messaggi in log4j in ordine decrescente di severità. La colonna di sinistra indica il livello di log designato e alla destra c'è una breve descrizione.
Livello | Descrizione |
---|---|
OFF | Il livello più alto possibile, viene usato per disattivare i log. |
FATAL | Errore importante che causa un prematuro termine dell'esecuzione. Ci si aspetta che questo sia visibile immediatamente all'operatore. |
ERROR | Un errore di esecuzione o una condizione imprevista. Anche questo deve essere immediatamente segnalato. |
WARN | Usato per ogni condizione inaspettata o anomalia di esecuzione, che però non necessariamente ha comportato un errore. |
INFO | Usato per segnalare eventi di esecuzione (esempio: startup/shutdown). Deve essere segnalato ma poi non mantenuto per tanto tempo. |
DEBUG | Usato nella fase di debug del programma. Viene riportato nel file di log. |
TRACE | Alcune informazioni dettagliate. Ci si aspetta che venga scritto esclusivamente nei file di log. È stato aggiunto nella versione 1.2.12. |
Esempio
[modifica | modifica wikitesto]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC
"http://logging.apache.org/log4j/docs/api/org/apache/log4j/xml/log4j.dtd">
<log4j:configuration>
<!-- an appender is an output destination, such as e.g. the console or a file;
names of appenders are arbitrarily chosen-->
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
</layout>
</appender>
<!-- loggers of category 'org.springframework' will only log messages of level info or higher;
if you retrieve Loggers by using the class name (e.g. Logger.getLogger(AClass.class))
and if AClass is part of the springframework.org package, it will belong to this category -->
<logger name="org.springframework">
<level value="info"/>
</logger>
<!-- everything of spring was set to info but for class PropertyEditorRegistrySupport we do want
debug logging -->
<logger name="org.springframework.beans.PropertyEditorRegistrySupport">
<level value="debug"/>
</logger>
<logger name="org.acegisecurity">
<level value="info"/>
</logger>
<root><!-- the root category -->
<!-- all log messages of level debug or more serious will be logged, unless defined otherwise -->
<!-- all log messages will be logged to the appender 'stdout', unless defined otherwise -->
<level value="debug" />
<appender-ref ref="stdout" />
</root>
</log4j:configuration>
Note
[modifica | modifica wikitesto]- ^ What's the Deal with the Log4Shell Security Nightmare?, su Lawfare, 10 dicembre 2021.
- ^ Associated Press, Recently uncovered software flaw 'most critical vulnerability of the last decade', su the Guardian, 11 dicembre 2021.
Altri progetti
[modifica | modifica wikitesto]- Wikimedia Commons contiene immagini o altri file su Log4j
Collegamenti esterni
[modifica | modifica wikitesto]- Sito ufficiale, su logging.apache.org.
- Log4j / Log4j (altra versione), su packages.debian.org.
- Repository sorgenti di Log4j, su github.com.
- Breve introduzione a log4j, su logging.apache.org.
- Manuale completo, su qos.ch. URL consultato il 1º giugno 2009 (archiviato dall'url originale il 9 giugno 2007).
- Log4View, su log4view.com.
- Una semplice dimostrazione real-time, su gmdx.net. URL consultato il 1º giugno 2009 (archiviato dall'url originale il 25 maggio 2009).
Port
[modifica | modifica wikitesto]- dlib C++ library Homepage - Un port per C++
- Log4cxx Homepage - Apache port per C++
- Log4plsql HomePage - Un port per Oracle PL/SQL
- Log4perl - Un port per Perl
- logging - Un sistema di logging per Python ispirato a log4j.
- Log4r - Un sistema di logging per Ruby ispirato a log4j.
- log4php un port per PHP
- log4sh Archiviato il 23 gennaio 2009 in Internet Archive. un port per le principali Unix shells: sh, bash, dash and ksh