Uploaded image for project: 'Log4j 2'
  1. Log4j 2
  2. LOG4J2-914

ThrowableProxy.getExtendedStackTraceAsString causes NullPointerException

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 2.1
    • 2.2
    • Core
    • None

    Description

      I'm trying to write a poc with Log4j 2.1, where distributed processes are logging to a remote server. The server is currently running the bundled TcpSocketServer.createSerializedSocketServer with a custom layout plugin.

      A process is logging an exception. I can then see in the custom layout plugin at the log server that the LogEvent doesn't contain a thrown, but that it contains a thrownProxy. So far so good. I'm then trying to get hold of a String representation of the message + stacktrace. I thought that I would be able to e.g invoke ThrowableProxy.getExtendedStackTraceAsString(), but that causes a NullPointerException since the throwable in the ThrowableProxy also is null after deserialization. Looks like ThrowableProxy assumes that throwable isn't null in a few methods.

      The exception that is logged by the client process is a simple new Exception("A message");

      The pom.xml that I'm using:

      <dependency>
      	<groupId>org.apache.logging.log4j</groupId>
      	<artifactId>log4j-api</artifactId>
      	<version>2.1</version>
      </dependency>
      <dependency>
      	<groupId>org.apache.logging.log4j</groupId>
      	<artifactId>log4j-core</artifactId>
      	<version>2.1</version>
      </dependency>
      <dependency>
      	<groupId>com.lmax</groupId>
      	<artifactId>disruptor</artifactId>
      	<version>3.3.0</version>
      </dependency>
      

      The stacktrace that I get in the server:

      2014-12-05 14:30:44,601 ERROR An exception occurred processing Appender XXXXX java.lang.NullPointerException
      	at org.apache.logging.log4j.core.impl.ThrowableProxy.getExtendedStackTraceAsString(ThrowableProxy.java:340)
      	at org.apache.logging.log4j.core.impl.ThrowableProxy.getExtendedStackTraceAsString(ThrowableProxy.java:323)
      

      Workaround:
      To invoke ThrowableProxy. getExtendedStackTrace() and format the stacktrace + message with my own format methods.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            ggregory Gary D. Gregory
            kajbj Kaj Bjurman
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment