获取方法的调用者的信息并进行日志记录

    技术2022-05-11  82

    近期编写一个日志代码.需要定位类,方法.查了一些资料后写了下面这个方法.

    在类的初始化时得到了方法的调用者信息。

    import  org.apache.log4j.Logger; /** * 系统日志记录类.封装了LOG4J的日志记录方法,并提供代码位置记录. *  * @author 黄剑武 */ public   class  SysLog  private String cname = ""private String mname = ""private int line = 0private String msgStr = ""private Logger log = nullprivate SysLog() {  String fullClassName = "com.telemd.framework.common.SysLog";  // 首先得到调用栈  StackTraceElement[] stack = (new Throwable()).getStackTrace();  // 然后从栈中向上搜索,直到搜索到我们的日志类。  int ix = 0;  int ic = 0;  while (ix < stack.length) {   StackTraceElement frame = stack[ix];      cname = frame.getClassName();   if (fullClassName.equals(cname)) {    ix++;    ic = ix;    continue;   }   ix++;  }  // 此时ic位置放置的是SysLog类。  while (ic < stack.length) {   StackTraceElement frame = stack[ic];   cname = frame.getClassName();   if (!fullClassName.equals(cname)) {    mname = frame.getMethodName();    line = frame.getLineNumber();    break;   }   ix++;  }  log = Logger.getLogger(cname);  msgStr = cname + "." + mname + "(" + cname + ".java:" + line + ""; } /**  * 返回系统日志实例  *   * @return  */ public static SysLog getLog() {  return new SysLog(); } /**  * 消息级日志  *   * @param message  */ public void infoLog(String message) {  if (log.isInfoEnabled()) {   log.info(msgStr + message);  } } /**  * 调试级日志  *   * @param message  */ public void debugLog(String message) {  if (log.isDebugEnabled()) {   log.debug(msgStr + message);  } } /**  * 跟踪级日志  *   * @param message  */ public void traceLog(String message) {  if (log.isTraceEnabled()) {   log.trace(msgStr + message);  } } /**  * 严重错误级日志  *   * @param message  */ public void fatalLog(String message) {  log.fatal(msgStr + message); } /**  * 错误级日志  *   * @param message  */ public void errorLog(String message) {  log.error(msgStr + message); } /**  * 警告级日志  *   * @param message  */ public void warnLog(String message) {  log.warn(msgStr + message); }}


    最新回复(0)