Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.
Auszug
hiddentrue

Nuclos Exception Logging: stacktrace-business.log, stacktrace-internal.log, InternalErrorException, HashCode, Log-Rotation, log4j2.

globe with meridians Sprache: Deutsch · English

open book Exception Logging

Getrennte Stacktrace-Logs – business/internal, HashCode-Zuordnung und Log-Rotation.

Status
colourGrey
titleReferenz
Status
colourBlue
titleAdministrator
Status
colourGreen
titleStand: Jul 2026
Status
colourGrey
titlegilt fuer Nuclos 4.2026.x

Panel
bgColor#F4F5F7

Auf dieser Seite

Inhalt
maxLevel2

...

minLevel2

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.

stacktrace-business.log

...

Reduzierte Stacktraces der BusinessExceptions

...

(Infrastruktur-Zeilen von Nuclos/Spring/Java/Tomcat werden weggelassen):

Codeblock
languagetext
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.

stacktrace-internal.log

...

Voller Stacktrace aller übrigen (Runtime

...

-)Exceptions. Jeder Eintrag beginnt

...

mit

...

dem HashCode #, der

...

auch im Client angezeigt wird

...

:

Codeblock
languagetext
#-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
languagetext
2020-06-24 09:17:21,916 WARN [org.nuclos.server.common.NuclosRemoteInvocationExecutor] - InternalError '#-22567581 2020-06-24 09:17:21': java.lang.NullPointerException

Log-Rotation

...

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
languagexml
    <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>

...

Altes Logging wiederherstellen

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
titleInstaller & altes Verhalten

Der Installer setzt conf/log4j2.xml zurück. Für dauerhafte Änderungen die Datei nach extensions/conf kopieren. Um wieder alles ins server.log zu schreiben, an den Stacktrace-Loggern

additivity="true" setzen.

Verwandte Seiten

gear Logging


Übersicht.

Öffnen →

gear SQL Logging


SQL.

Öffnen →

. Letzteres schreibt dann die Stacktraces in das server.log wie auch in die neuen Log Dateien.