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

Backward compatibility issue in log4j-1.2-api NDC pop() and peek()

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 2.2, 2.3
    • 2.4
    • Log4j 1.2 bridge
    • None

    Description

      While going through and migrating our projects to log4j 2.2, there are several apps and 3rd party libraries that we use that depend on log4j 1.2.

      Whilst the log4j-1.2-api library pretty much works flawlessly for us, I ran into an issue today with the opensaml1 library which breaks when it tries to call NDC.pop().

      In log4j 1.2, NDC.pop() would check to see if the stack was empty and if it was, returned an empty string but with the log4j-1.2-api library, the DefaultThreadContextStack.pop() ends up throwing a NoSuchElementException which causes everything to fall over for us.

      Given the library is meant to provide backwards compatibility, shouldn't the behaviour also be the same? At present, upgrading the OpenSAML library isn't an option, frustratingly.

      ] Unhandled exception: - java.util.NoSuchElementException: The ThreadContext stack is empty
      at org.apache.logging.log4j.spi.DefaultThreadContextStack.pop(DefaultThreadContextStack.java:185)
      at org.apache.logging.log4j.ThreadContext.pop(ThreadContext.java:391)
      at org.apache.log4j.NDC.pop(NDC.java:121)
      at org.opensaml.SAMLException.getInstance(Unknown Source)
      at org.opensaml.SAMLResponse.fromDOM(Unknown Source)
      at org.opensaml.SAMLResponse.<init>(Unknown Source)
      at org.jasig.cas.client.validation.Saml11TicketValidator.parseResponseFromServer(Saml11TicketValidator.java:51)
      at

      Attachments

        Activity

          People

            Unassigned Unassigned
            h4xmd Marc Dergacz
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: