Introduzione a Log4j 2

Mattepuffo's logo
Introduzione a Log4j 2

Introduzione a Log4j 2

Log4j 2 è una libreria di logging per Java; ed è anche una delle più apprezzate e utlizzate.

Oggi vediamo qualche esempio di base, precisando che non sempre c'è bisogno di questa libreria; in molti casi può bastare il sistema di logging standard di Java.

Comunque, se avete Maven aggiungete questa dipendenza al vostro pom.xml:

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>

Detto questo, nella directory resource di Maven (src/main/resources) create un file di proeprties per la configurazione; dovete nominarlo log4j2.properties:

status = error
dest = err
name = PropertiesConfig
 
property.filename = target/rolling/rollingtest.log
 
filter.threshold.type = ThresholdFilter
filter.threshold.level = debug
 
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = error
 
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = target/rolling2/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
 
logger.rolling.name = com.example.my.app
logger.rolling.level = debug
logger.rolling.additivity = false
logger.rolling.appenderRef.rolling.ref = RollingFile
 
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT

L'esempio è ripreso direttamente dal sito ufficiale; considerate che sono supportati anche altri formati per la configurazione, come XML o JSON.

Questo un esempio di codice Java:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Main {

    private static final Logger logger = LogManager.getLogger(Main.class);

    public static void main(String[] args) {
        String params = "Mattepuffo testing log4j";

        if (logger.isDebugEnabled()) {
            logger.debug("DEBUG: " + params);

        }

        if (logger.isInfoEnabled()) {
            logger.info("INFO: " + params);
        }

        logger.warn("WARING: " + params);
        logger.error("ERROR: " + params);
        logger.fatal("FATAL: " + params);

        try {
            BufferedReader br = new BufferedReader(
                    new FileReader("/home/matte/Desktop/file_che_non_eiste.txt")
            );
        } catch (FileNotFoundException ex) {
            logger.fatal("TEST ECCEZIONE: " + ex);
        }
    }
}

Qui possiamo vedere in console sia dei messaggi, che il messaggio di eccezione quando il programma non trova il file che non esiste.

In questo modo abbiamo fatto un esempio un pò più completo.

Enjoy!


Condividi

1 Commenti

  • Francesco

    Ciao, trovo l'esempio carente di spiegazioni inerenti il logging su file. Potresti integrare cortesemente?Ad esempio il file che verrà creato su filesystem qual'è dei 2 tra il valore di "appender.rolling.fileName" e il valore di "appender.rolling.filePattern" ?

    25/09/2020

Commentami!