From 1429584de80a842a15fa678e89409f0b1a5a2f9f Mon Sep 17 00:00:00 2001 From: Alejandro Revilla Date: Mon, 27 Mar 2017 09:04:31 -0300 Subject: [PATCH] Caller's short class name, method and line number [ci skip] --- jpos/src/main/java/org/jpos/util/Caller.java | 47 ++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 jpos/src/main/java/org/jpos/util/Caller.java diff --git a/jpos/src/main/java/org/jpos/util/Caller.java b/jpos/src/main/java/org/jpos/util/Caller.java new file mode 100644 index 0000000000..01576f8ab4 --- /dev/null +++ b/jpos/src/main/java/org/jpos/util/Caller.java @@ -0,0 +1,47 @@ +/* + * jPOS Project [http://jpos.org] + * Copyright (C) 2000-2017 jPOS Software SRL + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.jpos.util; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Return Caller's short class name, method and line number + */ +public class Caller { + private static String JAVA_ID_PATTERN = "(\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*)\\.*"; + private static Pattern FQCN = Pattern.compile(JAVA_ID_PATTERN + "(\\." + JAVA_ID_PATTERN + ")*"); + public static String info() { + return info(1); + } + public static String info(int pos) { + StackTraceElement st = Thread.currentThread().getStackTrace()[2+pos]; + String clazz = st.getClassName(); + Matcher matcher = FQCN.matcher(clazz); + StringBuilder sb = new StringBuilder(); + while (matcher.find()) { + sb.append(matcher.hitEnd() ? matcher.group(1) : matcher.group(1).charAt(0)); + sb.append('.'); + } + return sb.append(st.getMethodName()) + .append(':') + .append(Integer.toString(st.getLineNumber())) + .toString(); + } +}