(getStackTrace)将异常转化成String

有时候想获取异常日志详细信息上报(具体哪个类哪一行出现异常),可以通过以下方式:

    private static String getStackMsg(Exception e) {  
      
            StringBuffer sb = new StringBuffer();  
            StackTraceElement[] stackArray = e.getStackTrace();  
            for (int i = 0; i < stackArray.length; i++) {  
                StackTraceElement element = stackArray[i];  
                sb.append(element.toString() + "\n");  
            }  
            return sb.toString();  
        }  
      
        private static String getStackMsg(Throwable e) {  
      
            StringBuffer sb = new StringBuffer();  
            StackTraceElement[] stackArray = e.getStackTrace();  
            for (int i = 0; i < stackArray.length; i++) {  
                StackTraceElement element = stackArray[i];  
                sb.append(element.toString() + "\n");  
            }  
            return sb.toString();  
        }  

原文地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,我们可以使用 Map 来实现异常信息的缓存。具体实现如下: ``` public class ExceptionCache { private static Map<String, String> cacheMap = new ConcurrentHashMap<>(); public static String getStackTrace(Throwable throwable) { String key = throwable.getClass().getName() + ":" + throwable.getMessage(); String stackTrace = cacheMap.get(key); if (stackTrace == null) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); throwable.printStackTrace(pw); stackTrace = sw.toString(); cacheMap.put(key, stackTrace); } return stackTrace; } } ``` 在上面的代码中,我们定义了一个静态变量 `cacheMap`,用来存储异常信息。在 `getStackTrace` 方法中,我们首先根据异常名称和异常信息生成一个唯一的 key,然后从缓存中获取这个 key 对应的异常信息。如果缓存中没有这个异常信息,则使用 StringWriter 和 PrintWriter 将异常信息转化为字符串,然后将它存入缓存中。最后返回这个异常信息字符串。 使用这个异常信息缓存的方法很简单,只需要在需要获取异常信息的地方调用 `ExceptionCache.getStackTrace()` 方法即可: ``` try { // some code that may throw an exception } catch (Exception e) { String stackTrace = ExceptionCache.getStackTrace(e); // do something with the exception stack trace } ``` 这样,我们就可以在程序中方便地缓存和获取异常信息了。注意,在实际应用中,我们还需要考虑缓存的清理和过期机制,防止缓存过多占用过多内存或者缓存的异常信息已经过期不再有意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值