I rzeczywiście napisał biblioteki (https://github.com/michaelgantman/Mgnt/releases/tag/1.01) zawiera kilka narzędzi. Jednym z nich jest filtr stosu ogólnego zastosowania , którego użyłem szeroko i uznałem za bardzo użyteczny. Klasa nazywa się TextUtils i ma metodę getStacktrace() z kilkoma nadpisanymi sygnaturami. Trwa wykonanie instancji Throwable i umożliwia ustawienie prefiksu pakietów dla pakietów , które są istotne.Powiedzmy kod Twojej firmy zawsze przebywa w pakietach, które zaczynają się od „com.plain. *” Więc można ustawić takiego prefiksu i zrobić to
logger.info(TextUtils.getStacktrace(e, true, "com.plain."));
będzie odfiltrować bardzo elegancko wszystkie bezużyteczne części śladu pozostawiając Ty z bardzo zwartym stacktrace. Również uważam, że to bardzo wygodnym wstępnie ustawić prefiks a potem po prostu użyć metody wygodą
TextUtils.getStacktrace(e);
Będzie to zrobić to samo. Aby zaprogramować prefiks wystarczy użyć metody
setRelevantPackage("com.plain.");
Również w przypadku korzystania wiosna środowisko można dodać następujące segment do konfiguracji wiosny i wtedy wszystko jest gotowe:
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="com.mgnt.utils.TextUtils"/>
<property name="targetMethod" value="setRelevantPackage"/>
<property name="arguments" value="com.plain."/>
</bean>
Biblioteka Pochodzi z dobrze napisana (Mam nadzieję) Javadoc, który wyjaśnia wszystko szczegółowo. Ale tutaj jest trochę Teaser: otrzymasz następujące StackTrace:
at com.plain.BookService.listBooks()
at com.plain.BookService$$FastClassByCGLIB$$e7645040.invoke()
at net.sf.cglib.proxy.MethodProxy.invoke()
...
at com.plain.LoggingAspect.logging()
at sun.reflect.NativeMethodAccessorImpl.invoke0()
...
at com.plain.BookService$$EnhancerByCGLIB$$7cb147e4.listBooks()
at com.plain.web.BookController.listBooks()
zamiast
at com.plain.BookService.listBooks()
at com.plain.BookService$$FastClassByCGLIB$$e7645040.invoke()
at net.sf.cglib.proxy.MethodProxy.invoke()
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed()
at com.plain.LoggingAspect.logging()
at sun.reflect.NativeMethodAccessorImpl.invoke0()
at sun.reflect.NativeMethodAccessorImpl.invoke()
at sun.reflect.DelegatingMethodAccessorImpl.invoke()
at java.lang.reflect.Method.invoke()
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs()
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod()
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.aop.interceptor.AbstractTraceInterceptor.invoke()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept()
at com.plain.BookService$$EnhancerByCGLIB$$7cb147e4.listBooks()
at com.plain.web.BookController.listBooks()
Ach tak, "ślad stosu z piekła rodem" według Cay Horstmann: https://plus.google.com/+CayHorstmann/posts/YAwGCVpLXgH –