)]}'
{
  "commit": "4dee591823e92007665ba9dd6b487b98536c131a",
  "tree": "1acd1bda1459240cf00b4f447029bea2cfee720d",
  "parents": [
    "554d8f9ee9f2c3f84f43587fab2052741b12b6aa"
  ],
  "author": {
    "name": "Vasily Pelikh",
    "email": "Java.deveveloper@gmail.com",
    "time": "Mon Jul 20 18:58:42 2026 +0300"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Jul 20 21:28:42 2026 +0530"
  },
  "message": "[main] Port `InternalLoggerRegistry` from `2.x` (#3418 and #3681 ports) (#4157)\n\n* Port `InternalLoggerRegistry` from `2.x`\n\nMinimizes lock usage by moving logger instantiation outside the write lock (PR #3418). Adds stale entry detection via ReferenceQueue (PR #3681).\n\nSigned-off-by: Vasily Pelikh \u003c2010720+vpelikh@users.noreply.github.com\u003e\n\n* Apply spotless formatting to InternalLoggerRegistryTest\n\n* Fix InternalLoggerRegistry null-MessageFactory lookup mismatch in Log4j 3\n\nInternalLoggerRegistry.getLogger(name, null) normalized null to a hardcoded ParameterizedMessageFactory.INSTANCE, but LoggerContext stored loggers under its DI-injected defaultMessageFactory (ReusableMessageFactory in Log4j 3). This store-key/get-key mismatch caused testGetLoggerRetrievesExistingLogger, testHasLoggerReturnsCorrectStatus, and testExpungeStaleWeakReferenceEntries to all fail.\n\n- InternalLoggerRegistry: constructor-inject defaultMessageFactory (final field), resolve null→defaultMessageFactory instead of hardcoded INSTANCE.\n- LoggerContext: construct InternalLoggerRegistry with its own defaultMessageFactory after DI resolution.\n- Test: iterate all message-factory buckets (.values()) instead of assuming ParameterizedMessageFactory.INSTANCE.\n\n* InternalLoggerRegistry: add Javadoc, align with 2.x naming, fix return-in-finally, add expungeStaleEntries\n\n---------\n\nSigned-off-by: Vasily Pelikh \u003c2010720+vpelikh@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "28ca8863ed643492638b97712785f2ebe3eabc14",
      "new_mode": 33188,
      "new_path": "log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/internal/InternalLoggerRegistryTest.java"
    },
    {
      "type": "modify",
      "old_id": "4b5d3dd0ed25c26940ae062617320570aa8acd89",
      "old_mode": 33188,
      "old_path": "log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java",
      "new_id": "1acbff7e8dfa7c183dff6de0177b5a7769f94311",
      "new_mode": 33188,
      "new_path": "log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0f7aa959fe99911f29202bcd89e3fff80e044ab8",
      "new_mode": 33188,
      "new_path": "log4j-core/src/main/java/org/apache/logging/log4j/core/util/internal/InternalLoggerRegistry.java"
    }
  ]
}
