Log4j
# Log4j

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", che permette l'esecuzione arbitraria di codice in Log4j. Secondo alcuni si tratta della "singola vulnerabilità più grossa e più critica dell'ultimo decennio".

## Livelli di log

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. |
