h1. Logging guidelines {{toc}} h2. Framework h3. SLF4J (Simple Logging Facade for Java) "Documentation":http://www.slf4j.org/docs.html h3. Maven No dependency SHOULD be added to the module POM. The dependencies are already defined in the ecard client POM. h3. Preamble
import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(MYCLASS.class);h3. SLF4J with java.util.logging backend This code SHOULD only be using in JUnit tests.
// Reset configuration to avoid multiple log entries. java.util.logging.LogManager.getLogManager().reset(); // Add new console handler ConsoleHandler ch = new ConsoleHandler(); ch.setLevel(Level.ALL); // Set logging level LogManager.getLogger(MYCLASS.class.getName()).setLevel(Level.FINE); // Log message as jdk logging level INFO logger.info(LoggingConstants.FINE, "Log my message: {}", message); // Log message as jdk logging level FINE logger.debug(LoggingConstants.FINE, "Log my message: {}", message); // Log message as jdk logging level WARNING logger.warn(LoggingConstants.FINE, "Log my message: {}", message); // Log message as jdk logging level SEVERE logger.error(LoggingConstants.FINE, "Log my message: {}", message);h2. Levels h3. Overview Marker are specified in @org.openecard.client.common.logging.LoggingConstants@ * THROWING: [[Logging guidelines#Exceptions|Exceptions]] * SEVERE: * INFO: * CONFIG: * FINE: [[Logging guidelines#Exceptions|Messages]] * FINER: [[Logging guidelines#Exceptions|Events]] * FINEST: h3. Exceptions
import org.openecard.client.common.logging.LoggingConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(MYCLASS.class); try{ ... } catch (Exception e){ //h3. Messages Messages including APDUs, eCard-API messages, PAOS messages.logger.error(LoggingConstants.THROWING, "Exception", e); // }
import org.openecard.client.common.logging.LoggingConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(MYCLASS.class); //h3. Events E.g. GUI events.logger.debug(LoggingConstants.FINE, "Message received:\n{}", message); // //logger.debug(LoggingConstants.FINE, "Message sent:\n{}", message); //
import org.openecard.client.common.logging.LoggingConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(MYCLASS.class); //h2. Notes h3. Trace statements are omittedlogger.debug(LoggingConstants.FINER, "Event: {}", event); //
logger.trace("Trace a message: {}", message);Will be replaced by "slf4j extension":http://www.slf4j.org/extensions.html#javaagent. h2. Examples h3. APDU logging
import org.openecard.client.common.ECardConstants; import org.openecard.client.common.logging.LogManager; java.util.logging.LogManager.getLogManager().reset(); ConsoleHandler ch = new ConsoleHandler(); ch.setLevel(Level.ALL); LogManager.getLogger("org.openecard.client.ifd.scio.wrapper").addHandler(ch); LogManager.getLogger("org.openecard.client.ifd.scio.wrapper").setLevel(Level.FINE);