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){
  // 
  logger.error(LoggingConstants.THROWING, "Exception", e);
  // 
}
h3. Messages Messages including APDUs, eCard-API messages, PAOS messages.
import org.openecard.client.common.logging.LoggingConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(MYCLASS.class);

// 
logger.debug(LoggingConstants.FINE, "Message received:\n{}", message);
// 

// 
logger.debug(LoggingConstants.FINE, "Message sent:\n{}", message);
// 
h3. Events E.g. GUI events.
import org.openecard.client.common.logging.LoggingConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(MYCLASS.class);

// 
logger.debug(LoggingConstants.FINER, "Event: {}", event);
// 
h2. Notes h3. Trace statements are omitted
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);