| Auszug | ||
|---|---|---|
| ||
Nuclos Exception Logging: stacktrace-business.log, stacktrace-internal.log, InternalErrorException, HashCode, Log-Rotation, log4j2. |
Sprache: Deutsch · English
Getrennte Stacktrace-Logs – business/internal, HashCode-Zuordnung und Log-Rotation.
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Panel | ||||
|---|---|---|---|---|
| ||||
Auf dieser Seite
|
...
|
Exceptions an
...
den Client enthalten
...
keinen Stacktrace
...
/Cause mehr – diese werden serverseitig gesondert gesichert.
...
RuntimeExceptions werden
...
zu einer neutralen InternalErrorException mit einem HashCode
...
, über den sich der Original-Stacktrace im Log wiederfinden lässt. BusinessExceptions gehen (ohne Stacktrace) mit allen nötigen Extras (InputRequired, FieldValidation) an den Client.
...
Reduzierte Stacktraces der BusinessExceptions
...
(Infrastruktur-Zeilen von Nuclos/Spring/Java/Tomcat werden weggelassen):
| Codeblock | ||
|---|---|---|
| ||
2020-06-24 08:29:40 - null
org.nuclos.api.context.InputRequiredException: null
at extension.nuclet.test.rules.TestInputRequiredExceptionExtension.doInputMemo(TestInputRequiredExceptionExtension.java:198) ~[nuclos-integration-tests-rules-4.43.0-SNAPSHOT.jar:?]
at extension.nuclet.test.rules.TestInputRequiredExceptionExtension.doInputRequired(TestInputRequiredExceptionExtension.java:53) ~[nuclos-integration-tests-rules-4.43.0-SNAPSHOT.jar:?]
at extension.nuclet.test.rules.TestInputRequiredExceptionExtension.custom(TestInputRequiredExceptionExtension.java:34) ~[nuclos-integration-tests-rules-4.43.0-SNAPSHOT.jar:?] |
Stacktrace Zeilen der Infrastruktur (Nuclos, Spring, Java, Tomcat, Glassfish) werden nicht ausgegeben, da sie für BusinessExceptions keine relevanten Informationen enthalten.
...
Voller Stacktrace aller übrigen (Runtime
...
-)Exceptions. Jeder Eintrag beginnt
...
mit
...
dem HashCode #, der
...
auch im Client angezeigt wird
...
:
| Codeblock | ||
|---|---|---|
| ||
#-22567581 2020-06-24 09:17:21
java.lang.NullPointerException: null
at org.nuclos.server.eventsupport.ejb3.EventSupportFacadeBean.createBusinessObject(EventSupportFacadeBean.java:1855) ~[nuclos-server-4.43.0-SNAPSHOT.jar:?]
at org.nuclos.server.eventsupport.ejb3.EventSupportFacadeBean.executeUpdateSupportEvent(EventSupportFacadeBean.java:1555) ~[nuclos-server-4.43.0-SNAPSHOT.jar:?]
at org.nuclos.server.eventsupport.ejb3.EventSupportFacadeBean.fireSaveEventSupport_aroundBody62(EventSupportFacadeBean.java:2183) ~[nuclos-server-4.43.0-SNAPSHOT.jar:?]
at org.nuclos.server.eventsupport.ejb3.EventSupportFacadeBean$AjcClosure63.run(EventSupportFacadeBean.java:1) ~[nuclos-server-4.43.0-SNAPSHOT.jar:?]
at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96cproceed(AbstractTransactionAspect.aj:66) ~[spring-aspects-4.3.17.RELEASE.jar:4.3.17.RELEASE]
... |
...
Der zugehörige Eintrag im
...
server.log
...
:
| Codeblock | ||
|---|---|---|
| ||
2020-06-24 09:17:21,916 WARN [org.nuclos.server.common.NuclosRemoteInvocationExecutor] - InternalError '#-22567581 2020-06-24 09:17:21': java.lang.NullPointerException |
...
Die Dateien rotieren stündlich; aufbewahrt werden max. 8 stacktrace-business
...
- bzw. 512 stacktrace-internal
...
-Dateien.
...
Das kann in der log4j2.xml ([NUCLOS]/conf) nach belieben angepasst werden, wird allerdings von einem Installer wieder auf den Auslieferungszustand gesetzt.
Wenn man dies verhindern möchte, kann man die log4j2.xml nach [NUCLOS]/extensions/conf kopieren, dann nimmt der Installer immer diese dort hinterlegte Datei und die Anpassungen bleiben erhalten
...
Anpassbar in conf/log4j2.xml:
| Codeblock | ||
|---|---|---|
| ||
<RollingFile name="StacktraceBusiness" fileName="${server.home}/logs/stacktrace-business.log"
filePattern="${server.home}/logs/stacktrace-business-%d{yyyy-MM-dd-hh}.log.gz"
append="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy filePattern="${server.home}/logs/stacktrace-business-%d{yyyy-MM-dd-hh}.log.gz" />
</Policies>
<DefaultRolloverStrategy max="8"/>
</RollingFile>
<RollingFile name="StacktraceInternal" fileName="${server.home}/logs/stacktrace-internal.log"
filePattern="${server.home}/logs/stacktrace-internal-%d{yyyy-MM-dd-hh}.log.gz"
append="true">
<PatternLayout pattern="%m%n"/>
<Policies>
<TimeBasedTriggeringPolicy filePattern="${server.home}/logs/stacktrace-internal-%d{yyyy-MM-dd-hh}.log.gz" />
</Policies>
<DefaultRolloverStrategy max="512"/>
</RollingFile> |
...
Möchte man wieder alles in der einen server.log Datei, so kann auch dies in der log4j2.xml ([NUCLOS]/conf) angepasst werden:
| Codeblock |
|---|
<Logger name="StacktraceBusiness" additivity="false" level="error">
<AppenderRef ref="StacktraceBusiness"/>
</Logger>
<Logger name="StacktraceInternal" additivity="false" level="error">
<AppenderRef ref="StacktraceInternal"/>
</Logger> |
...
| Warnung | ||
|---|---|---|
| ||
Der Installer setzt |
|