/*********************************************************************************** * Copyright (c) 2013. Nickolay Gerilovich. Russia. * Some Rights Reserved. ************************************************************************************/ package com.github.nickvl.xspring.core.log.aop; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Abstract log adapter. */ abstract class AbstractLogAdapter implements LogAdapter { private static final String CALLING = "calling: "; private static final String RETURNING = "returning: "; private static final String THROWING = "throwing: "; @Override public Log getLog(Class clazz) { return LogFactory.getLog(clazz); } @Override public Log getLog(String name) { return LogFactory.getLog(name); } @Override public Object toMessage(String method, Object[] args, ArgumentDescriptor argumentDescriptor) { if (args.length == 0) { return CALLING + method + "()"; } String[] names = argumentDescriptor.getNames(); StringBuilder buff = new StringBuilder(CALLING).append(method).append('('); if (args.length > 1) { buff.append(args.length).append(" arguments: "); } if (names == null) { for (int i = 0; i < args.length; i++) { if (argumentDescriptor.isArgumentIndex(i)) { buff.append(asString(args[i])); buff.append(", "); } else { buff.append("?, "); } } } else { for (int i = argumentDescriptor.nextArgumentIndex(0); i >= 0; i = argumentDescriptor.nextArgumentIndex(i + 1)) { buff.append(names[i]).append('=').append(asString(args[i])); buff.append(", "); } } if (argumentDescriptor.nextArgumentIndex(0) != -1) { buff.setLength(buff.length() - 2); } buff.append(')'); return buff.toString(); } @Override public Object toMessage(String method, int argCount, Object result) { if (argCount == 0) { return RETURNING + method + "():" + asString(result); } return RETURNING + method + '(' + argCount + " arguments):" + asString(result); } @Override public Object toMessage(String method, int argCount, Exception e, boolean stackTrace) { String message; if (argCount == 0) { message = THROWING + method + "():" + e.getClass(); } else { message = THROWING + method + '(' + argCount + " arguments):" + e.getClass(); } if (e.getMessage() != null) { message += '=' + e.getMessage(); } return message; } protected abstract String asString(Object value); }