¿Cuándo el "~ [clases / :?]" string (o similar como ~ [:??]) Aparecen al final de las líneas de pila-traza en Java?

Ehsan:

Tengo una aplicación web desarrollada por Java 8.0 y despliega en Tomcat 8.0. En algunos escenarios, Tengo un error con una cadena con la que no estoy familiarizado. Por ejemplo, tengo un error igual que abajo en una de mis escenarios:

Caused by: java.lang.IllegalArgumentException
    at sun.reflect.GeneratedMethodAccessor6555.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_102]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_102]
    at org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:44) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:649) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:205) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:4745) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:189) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:128) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1152) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.Loader.processResultSet(Loader.java:1011) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.Loader.doQuery(Loader.java:949) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2692) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2675) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.Loader.list(Loader.java:2502) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:392) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1490) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1445) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at sun.reflect.GeneratedMethodAccessor8215.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_102]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_102]
    ... 64 more

He reinstalado Java y Tomcat, pero he estado sigue recibiendo este error. ¿Alguien tiene alguna idea o sugerencia?

Stephen C:

Esto no es un comportamiento normal para off-the-shelf Java. Por lo tanto, debemos concluir que estos stacktraces no están siendo generados por su código de llamadaThrowable::printStacktrace()

Después de hacer un poco de excavación, una posible causa es que está utilizando Logback para su registro, y en particular el uso de %xThrowablemás %throwablede un PatternLayoutpatrón. Esto incluye información adicional en el embalaje StackTrace con la sintaxis que está viendo. Debe consultar la documentación Logback para más detalles, porque hay muchas variaciones posibles en el lenguaje de patrones.

La documentación también dice:

Tenga en cuenta que dada su costo potencial, el cálculo de los datos de embalaje está desactivado por defecto. Cuando se habilita el cálculo de los datos de embalaje, PatternLayoutasumirá automáticamente el %xThrowablesufijo en lugar de %throwablesufijo al final de la cadena de patrón .

Por lo que los sufijos podrían ser un efecto secundario de hacer esto:

 <configuration packagingData="true">
    ...
 </configuration>

en la configuración Logback.


ACTUALIZACIÓN : Usted ha dicho que está utilizando en lugar de Log4j2 Logback.

Log4j2 tiene un diseño de registro basado en patrones equivalente con %xThrowableapoyo; ver https://logging.apache.org/log4j/2.x/manual/layouts.html

Por favor tener en cuenta que esta cadena aparece en algunos rastros de pila, no en todo eso.

Eso se puede explicar si su aplicación o algunas bibliotecas 3 ª parte que está utilizando están llamando Throwable::printStacktraceo similares directamente en algunas circunstancias, y la generación de los stacktraces a través del registrador en otros.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=235866&siteId=1
Recomendado
Clasificación