我们最近应用了一个缓存解决方案,该解决方案被几乎所有应用程序模块/组件(约50个项目)使用。为了更好地理解在不同系统“位置”执行的缓存操作,我们添加了日志记录当前执行的缓存操作,包括堆栈跟踪,以确切了解触发缓存操作的内容。
我们目前的方法是这样的:我们从new Throwable()获取堆栈跟踪信息,过滤掉无关的行并记录剩余的堆栈跟踪信息。遗憾的是,创建一个新的异常记录不是一项廉价的操作。由于我们不直接使用缓存而是通过Hibernate使用它,因此很难找出哪个调用者触发了操作,而没有访问堆栈跟踪的权限。
我的问题是:是否有比Throwable().getStackTrace或Thread.currentThread().getStackTrace()更高效的解决方案来访问当前的堆栈跟踪?
我们目前的方法是这样的:我们从new Throwable()获取堆栈跟踪信息,过滤掉无关的行并记录剩余的堆栈跟踪信息。遗憾的是,创建一个新的异常记录不是一项廉价的操作。由于我们不直接使用缓存而是通过Hibernate使用它,因此很难找出哪个调用者触发了操作,而没有访问堆栈跟踪的权限。
我的问题是:是否有比Throwable().getStackTrace或Thread.currentThread().getStackTrace()更高效的解决方案来访问当前的堆栈跟踪?