Log4j

Apache log4j
software
Logo
Logo
GenereLibreria software (non in lista)
SviluppatoreApache Software Foundation
Ultima versione2.23.1 (10 marzo 2024)
Sistema operativoMultipiattaforma
LinguaggioJava
LicenzaApache License 2.0
(licenza libera)
Sito weblogging.apache.org/log4j/2.x/
Modifica dati su Wikidata · Manuale

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

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

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

  1. ^ What's the Deal with the Log4Shell Security Nightmare?, su Lawfare, 10 dicembre 2021.
  2. ^ Associated Press, Recently uncovered software flaw 'most critical vulnerability of the last decade', su the Guardian, 11 dicembre 2021.

Altri progetti

Altri progetti

  • Wikimedia Commons
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file su Log4j

Collegamenti esterni

  • Sito ufficiale, su logging.apache.org. Modifica su Wikidata
  • Log4j / Log4j (altra versione), su packages.debian.org. Modifica su Wikidata
  • Repository sorgenti di Log4j, su github.com. Modifica su Wikidata
  • 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

  • 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
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica