iaik.logging.Log
interface that is
* based on Jakarta Commons-Logging.
*
* @author Fatemeh Philippi
* @version $Id$
*/
public class IaikLog implements iaik.logging.Log {
/** The hierarchy to log all IAIK output to. */
public static final String IAIK_LOG_HIERARCHY = "iaik.server";
/** The commons-loggin Log
to use for logging the messages. */
private static Logger log = LoggerFactory.getLogger(IAIK_LOG_HIERARCHY);
/** The node ID to use. */
private String nodeId;
private static final SetIAIK-MOA and some other IAIK libs sometimes log on level WARN but it's only an info. * However, log level WARN can trigger wrong alerts in monitoring systems.
* * @param msg */ public static void addLogMsgForReclassification(String msg) { LOGLEVEL_INFO_RECLASSIFICATION.add(msg); } /** * Add masking pattern into logger. * * @param maskPattern */ public static void addMaskPattern(String maskPattern) { maskPatterns.add(maskPattern); multilinePattern = Pattern.compile( maskPatterns.stream() .collect(Collectors.joining("|")), Pattern.MULTILINE ); } /** * Create a newIaikLog
.
*
* @param nodeId The node ID for this Log
object.
*/
public IaikLog(String nodeId) {
this.nodeId = nodeId;
}
/**
* @see iaik.logging.Log#isDebugEnabled()
*/
@Override
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
/**
* @see iaik.logging.Log#debug(TransactionId, Object, Throwable)
*/
@Override
public void debug(TransactionId transactionId, Object message, Throwable t) {
final IaikLogMsg msg = new IaikLogMsg(transactionId, nodeId, message);
log.debug(msg.toString(), t);
}
/**
* @see iaik.logging.Log#isInfoEnabled()
*/
@Override
public boolean isInfoEnabled() {
return log.isInfoEnabled();
}
/**
* @see iaik.logging.Log#info(TransactionId, Object, Throwable)
*/
@Override
public void info(TransactionId transactionId, Object message, Throwable t) {
Object blankedMsg = log.isTraceEnabled() ? message : maskMessage(message);
final IaikLogMsg msg = new IaikLogMsg(transactionId, nodeId, blankedMsg);
log.info(msg.toString(), t);
}
/**
* @see iaik.logging.Log#isWarnEnabled()
*/
@Override
public boolean isWarnEnabled() {
return log.isWarnEnabled();
}
/**
* @see iaik.logging.Log#warn(TransactionId, Object, Throwable)
*/
@Override
public void warn(TransactionId transactionId, Object message, Throwable t) {
Object blankedMsg = log.isTraceEnabled() ? message : maskMessage(message);
final IaikLogMsg msg = new IaikLogMsg(transactionId, nodeId, blankedMsg);
// log some messages on INFO. That's a work-around for suboptimal levels in third-party libs.
if (LOGLEVEL_INFO_RECLASSIFICATION.contains(blankedMsg)) {
log.info(msg.toString(), t);
} else {
log.warn(msg.toString(), t);
}
}
/**
* @see iaik.logging.Log#isErrorEnabled()
*/
@Override
public boolean isErrorEnabled() {
return log.isErrorEnabled();
}
/**
* @see iaik.logging.Log#error(TransactionId, Object, Throwable)
*/
@Override
public void error(TransactionId transactionId, Object message, Throwable t) {
Object blankedMsg = log.isTraceEnabled() ? message : maskMessage(message);
final IaikLogMsg msg = new IaikLogMsg(transactionId, nodeId, blankedMsg);
log.error(msg.toString(), t);
}
/**
* @see iaik.logging.Log#isFatalEnabled()
*/
@Override
public boolean isFatalEnabled() {
return log.isErrorEnabled();
}
/**
* @see iaik.logging.Log#fatal(TransactionId, Object, Throwable)
*/
@Override
public void fatal(TransactionId transactionId, Object message, Throwable t) {
Object blankedMsg = log.isTraceEnabled() ? message : maskMessage(message);
final IaikLogMsg msg = new IaikLogMsg(transactionId, nodeId, blankedMsg);
log.error(msg.toString(), t);
}
/**
* @see iaik.logging.Log#setNodeId(String)
*/
@Override
public void setNodeId(String nodeId) {
this.nodeId = nodeId;
}
/**
* @see iaik.logging.Log#getNodeId()
*/
@Override
public String getNodeId() {
return nodeId;
}
private String maskMessage(Object message) {
String msg = message != null ? message.toString() : "