package com.rubiconproject.oss.kv.distributed.impl;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.rubiconproject.oss.kv.distributed.Node;
public class OperationLog {
private static OperationLog instance = new OperationLog();
private static Log requestLog = LogFactory.getLog("haymitch.operationlog");
private static Log preferenceLog = LogFactory
.getLog("haymitch.preferencelog");
public static OperationLog getInstance() {
return instance;
}
public void log(String key, String op, long duration, boolean success) {
if (requestLog.isInfoEnabled())
requestLog.info(String.format("%1$s,%2$s,%3$d,%4$s", key, op,
duration, success));
}
public void logPreferenceList(String key, List<Node> preferenceList) {
if (preferenceLog.isInfoEnabled()) {
// hack to avoid list iteration for common cases
if (preferenceList.size() == 1)
preferenceLog.info(String.format("%1$s,%2$d", key,
preferenceList.get(0).getId()));
else if (preferenceList.size() == 2)
preferenceLog.info(String.format("%1$s,%2$d,%3$d", key,
preferenceList.get(0).getId(), preferenceList.get(1)
.getId()));
else if (preferenceList.size() == 3)
preferenceLog.info(String.format("%1$s,%2$s,%3$d,%4$d", key,
preferenceList.get(0).getId(), preferenceList.get(1)
.getId(), preferenceList.get(2).getId()));
else if (preferenceList.size() > 3) {
StringBuffer sb = new StringBuffer();
sb.append(key);
for (Node node : preferenceList) {
sb.append(',');
sb.append(node.getId());
}
preferenceLog.info(sb.toString());
}
}
}
}