package com.bagri.xquery.saxon.ext.util;
import static com.bagri.core.Constants.bg_ns;
import static com.bagri.core.Constants.bg_schema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sf.saxon.expr.XPathContext;
import net.sf.saxon.lib.ExtensionFunctionCall;
import net.sf.saxon.lib.ExtensionFunctionDefinition;
import net.sf.saxon.om.Sequence;
import net.sf.saxon.om.StructuredQName;
import net.sf.saxon.trans.XPathException;
import net.sf.saxon.value.SequenceType;
public class LogOutput extends ExtensionFunctionDefinition {
private static final transient Logger logger = LoggerFactory.getLogger("com.bagri.XQuery.Output");
//public LogOutput() {
//}
@Override
public StructuredQName getFunctionQName() {
return new StructuredQName(bg_schema, bg_ns, "log-output");
}
@Override
public int getMinimumNumberOfArguments() {
return 1;
}
@Override
public int getMaximumNumberOfArguments() {
return 3;
}
@Override
public SequenceType[] getArgumentTypes() {
return new SequenceType[] {SequenceType.SINGLE_STRING, SequenceType.OPTIONAL_STRING, SequenceType.OPTIONAL_STRING};
}
@Override
public SequenceType getResultType(SequenceType[] suppliedArgumentTypes) {
return SequenceType.VOID; // EMPTY_SEQUENCE
}
@Override
public ExtensionFunctionCall makeCallExpression() {
return new ExtensionFunctionCall() {
@Override
public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {
logger.info("call.enter; arguments: {}", (Object[]) arguments);
String message = arguments[0].head().getStringValue();
String level = "debug";
if (arguments.length > 1) {
level = arguments[1].head().getStringValue();
}
Logger log = logger;
if (arguments.length > 2) {
String l = arguments[2].head().getStringValue();
log = LoggerFactory.getLogger(l);
}
logger.info("call; message: {}; level: {}; logger: {}", message, level, log);
switch (level) {
case "trace": log.trace(message); break;
case "debug": log.debug(message); break;
case "info": log.info(message); break;
case "warn": log.warn(message); break;
case "error": log.error(message);
}
return null;
}
};
}
}