什么时候~[classes/:?]”;在Java中,字符串(或类似的字符串,如~[?:?])出现在堆栈跟踪行的末尾?
我有一个由Java8.0开发并部署在Tomcat8.0上的web应用程序。在某些情况下,我遇到了一个我不熟悉的字符串错误。例如,在我的一个场景中,我有一个与以下相同的错误:什么时候~[classes/:?]”;在Java中,字符串(或类似的字符串,如~[?:?])出现在堆栈跟踪行的末尾?,java,tomcat,Java,Tomcat,我有一个由Java8.0开发并部署在Tomcat8.0上的web应用程序。在某些情况下,我遇到了一个我不熟悉的字符串错误。例如,在我的一个场景中,我有一个与以下相同的错误: Caused by: java.lang.IllegalArgumentException at sun.reflect.GeneratedMethodAccessor6555.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAcces
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
我已经重新安装了Java和Tomcat,但仍然出现了这个错误。
有人有什么想法或建议吗?对于现成的Java来说,这不是正常的行为。因此,我们必须得出结论,这些stacktrace不是由您的代码调用
Throwable::printStacktrace()
在做了一些挖掘之后,一个可能的原因是您正在使用Logback进行日志记录,尤其是在模式布局中使用%xThrowable
而不是%throwable
。这包括stacktrace中的额外打包信息以及您看到的语法。有关更多详细信息,请参阅,因为模式语言中有许多可能的变体
文件还说:
请注意,考虑到其潜在成本,默认情况下禁用包装数据的计算。当启用包装数据计算时,PatternLayout
将自动采用模式字符串末尾的%xThrowable
后缀,而不是%throwable
后缀
因此后缀可能是这样做的副作用:
<configuration packagingData="true">
...
</configuration>
...
在Logback配置中
更新:您说您正在使用Log4j2而不是Logback
Log4j2具有等效的基于模式的日志布局,支持%xThrowable
;看
请考虑此字符串出现在一些堆栈跟踪中,而不是在所有这些堆栈中。
如果您的应用程序或正在使用的某些第三方库在某些情况下直接调用Throwable::printStacktrace
或类似程序,则可以解释这一点,并通过其他文件中的记录器生成堆栈跟踪。查看日志配置……您可能正在使用。@StephenC此字符串出现在某些堆栈跟踪中,而不是所有堆栈跟踪中。虽然我检查了日志配置,但没有特殊设置。@LuisMuñoz没有,我正在使用JDK。@LuisMuñoz-这与JRE和JDK无关。你链接到的Q是关于缺少源代码/调试信息,而不是额外的打包信息。谢谢你的回答。但是,我们不使用Logback进行日志记录,也不存在任何对Logback的依赖(也是可传递的依赖)。@StephanC-我们使用的是Log4j-2。0@StephanC-请考虑此字符串出现在一些堆栈跟踪中,而不是在所有这些堆栈中。