private static String[] LOGGING_METHODS = new String[] {
"trace", "debug", "info", "warn", "error"
};
+
+ public static final TCon Throwable = Types.con("Prelude", "Throwable");
public LoggingModule() {
super("Logging");
// Common types
Type loggingType = Types.functionE(Types.STRING, Types.PROC, Types.UNIT);
+ Type loggingTypeWithException = Types.functionE(new Type[] { Types.STRING, Throwable }, Types.PROC, Types.UNIT);
// Add logging methods
for(String methodName : LOGGING_METHODS) {
- JavaMethod javaMethod = new JavaMethod(false, "org/slf4j/Logger", methodName, Types.PROC, Types.UNIT, Logger, Types.STRING);
- SCLValue value = new SCLValue(Name.create(getName(), methodName));
- value.setType(loggingType);
- value.setMacroRule(new MacroRule() {
- @Override
- public Expression apply(SimplificationContext context, Type[] typeParameters, EApply apply) {
- ConcreteModule module = context.getCompilationContext().module;
- String identifier;
- if (module != null)
- identifier = module.getName().replaceAll("/", ".");
- else
- identifier = CommandSession.class.getName();
- apply.set(new ELiteral(javaMethod), new Expression[] {
- new EExternalConstant(LoggerFactory.getLogger(identifier), Logger),
- apply.parameters[0]
- });
- return apply;
- }
- });
- addValue(value);
+ {
+ JavaMethod javaMethod = new JavaMethod(false, "org/slf4j/Logger", methodName, Types.PROC, Types.UNIT, Logger, Types.STRING);
+ SCLValue value = new SCLValue(Name.create(getName(), methodName));
+ value.setType(loggingType);
+ value.setMacroRule(new MacroRule() {
+ @Override
+ public Expression apply(SimplificationContext context, Type[] typeParameters, EApply apply) {
+ ConcreteModule module = context.getCompilationContext().module;
+ String identifier;
+ if (module != null)
+ identifier = module.getName().replaceAll("/", ".");
+ else
+ identifier = CommandSession.class.getName();
+ apply.set(new ELiteral(javaMethod), new Expression[] {
+ new EExternalConstant(LoggerFactory.getLogger(identifier), Logger),
+ apply.parameters[0]
+ });
+ return apply;
+ }
+ });
+ addValue(value);
+ }
+ {
+ JavaMethod javaMethod = new JavaMethod(false, "org/slf4j/Logger", methodName, Types.PROC, Types.UNIT, Logger, Types.STRING, Throwable);
+ SCLValue value = new SCLValue(Name.create(getName(), methodName + "E"));
+ value.setType(loggingTypeWithException);
+ value.setMacroRule(new MacroRule() {
+ @Override
+ public Expression apply(SimplificationContext context, Type[] typeParameters, EApply apply) {
+ ConcreteModule module = context.getCompilationContext().module;
+ String identifier;
+ if (module != null)
+ identifier = module.getName().replaceAll("/", ".");
+ else
+ identifier = CommandSession.class.getName();
+ apply.set(new ELiteral(javaMethod), new Expression[] {
+ new EExternalConstant(LoggerFactory.getLogger(identifier), Logger),
+ apply.parameters[0],
+ apply.parameters[1]
+ });
+ return apply;
+ }
+ });
+ addValue(value);
+ }
}
setParentClassLoader(LoggerFactory.class.getClassLoader());