Logger avec Lombok : Différence entre versions
m |
(Aucune différence)
|
Version actuelle en date du 23 février 2018 à 17:52
Dans tout projet Java
des traces sont mises en place à l'aide de Logger
. Il existe un grand nombre de framework pour générer les traces, mais la mise en place est toujours la même par l'initialisation d'une instance du logger, bien souvent en statique.
Lombok
permet de s'affranchir de l'initialisation des loggers et cela sur une large palette de frameworks. Cet article présente des exemples sur trois framework courant.
Le code source est disponible à l'adresse suivante: http://www.svn.jouvinio.net/study/trunk/lombok, et en particulier les classes du package fr.ejn.tutorial.java.lombok.logger
.
Votre avis
Nobody voted on this yet
|
|
Log4J
Log4J a été un framework populaire dans les projets. L'annotation Log4j
permet de mettre à disposition une variable log
basée sur l'implémentation Log4J
comme démontré dans la classe ServiceWithLog4j
.
package fr.ejn.tutorial.java.lombok.logger;
import lombok.extern.log4j.Log4j;
/**
* Tutorial class to illustrate logger with Log4J.
*
* @author Etienne Jouvin
*
*/
@Log4j
public class ServiceWithLog4j {
public void logMessage(String message) {
log.info(message);
}
}
Il est nécessaire d'avoir une configuration du logger disponible, comme celle mise à disposition dans le fichier log4j.properties
pour les tests unitaires.
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Cette configuration permet de logger les messages au niveau de la console, illustré dans le test ServiceWithLog4jTest
.
package fr.ejn.tutorial.java.lombok.logger;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class ServiceWithLog4jTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testLogMessage() throws Exception {
ServiceWithLog4j instance = new ServiceWithLog4j();
instance.logMessage("---> Start with log4j service");
instance.logMessage("my message");
instance.logMessage("---> End with log4j service");
}
}
Apache Commons Logging
Le framework Apache Commons Logging
est un des tous premiers qui introduisait une couche par dessus les différents frameworks, dont l'implémentation est sélectionnée en fonction du fichier de configuration.
L'utilisation de l'annotation CommonsLog
permet de rendre disponible une variable log
comme démontré dans la classe ServiceWithCommonsLogging
.
package fr.ejn.tutorial.java.lombok.logger;
import lombok.extern.apachecommons.CommonsLog;
/**
* Tutorial class to illustrate logger with commons-logging.
*
* @author Etienne Jouvin
*
*/
@CommonsLog
public class ServiceWithCommonsLogging {
public void logMessage(String message) {
log.info(message);
}
}
Il est nécessaire d'avoir une configuration du logger disponible, comme celle mise à disposition dans le fichier commons-logging.properties
pour les tests unitaires.
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
# jdk handlers
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
# default log level
.level=INFO
Cette configuration permet de logger les messages au niveau de la console avec le framework Jdk14Logger
, illustré dans le test ServiceWithCommonsLoggingTest
.
package fr.ejn.tutorial.java.lombok.logger;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class ServiceWithCommonsLoggingTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testLogMessage() throws Exception {
ServiceWithCommonsLogging instance = new ServiceWithCommonsLogging();
instance.logMessage("---> Start with commons-logging service");
instance.logMessage("my message");
instance.logMessage("---> End with commons-logging service");
}
}
SLF4J
Le framework SLF4J
est similaire à Commons Logging
mais plus récent et très populaire, du fait du grand nombre d'implémentations.
L'utilisation de l'annotation SLF4J
permet de rendre disponible une variable log
comme démontré dans la classe ServiceWithSlf4j
.
package fr.ejn.tutorial.java.lombok.logger;
import lombok.extern.slf4j.Slf4j;
/**
* Tutorial class to illustrate logger with SLF4J.
*
* @author Etienne Jouvin
*
*/
@Slf4j
public class ServiceWithSlf4j {
public void logMessage(String message) {
log.info(message);
}
}
Aucun fichier de configuration n'est nécessaire pour le framework SLF4J
, cela se base sur l'implémentation disponible dans le classpath
. Pour ce projet, l'implémentation slf4j-simple
est utilisée pour sa simplicité. Le test unitaire ServiceWithSlf4jTest
illustre l'utilisation.
package fr.ejn.tutorial.java.lombok.logger;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class ServiceWithSlf4jTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testLogMessage() throws Exception {
ServiceWithSlf4j instance = new ServiceWithSlf4j();
instance.logMessage("---> Start with slf4j service");
instance.logMessage("my message");
instance.logMessage("---> End with slf4j service");
}
}
Voir aussi
Documentation officielle: https://projectlombok.org/features/log