)]}'
{
  "commit": "fcbe4fedfe33f043f99da422f9a4890e0e04ecfd",
  "tree": "b77266ba9fb202f19fb60285e957cd026dbbab7d",
  "parents": [
    "ea2fb09b0736cbbcc28b66ca57ca6513f6c9284f"
  ],
  "author": {
    "name": "吴晟 Wu Sheng",
    "email": "wu.sheng@foxmail.com",
    "time": "Wed Oct 07 08:26:49 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Oct 07 08:26:49 2026 +0800"
  },
  "message": "Support logback 1.6.x in the logback toolkit layouts (#837)\n\n* Support logback 1.6.x in the logback toolkit layouts\n\nLogback 1.6.0 removed PatternLayout.defaultConverterMap, which\nTraceIdPatternLogbackLayout and TraceIdMDCPatternLogbackLayout wrote their\nconversion words to in a static initializer, so both failed with\nNoSuchFieldError: defaultConverterMap (apache/skywalking#14120).\n\nThe layouts now register their conversion words in the logging context\u0027s\nconversion rule registry (CoreConstants.PATTERN_RULE_REGISTRY) when they\nstart, updating it in place as logback does for \u003cconversionRule\u003e. Logback\n1.2.x to 1.6.x all read class names from that registry, so the same toolkit\nartifact keeps working on older logback. Logback 1.5.13 is not supported\nbecause of an upstream regression fixed in 1.5.14 (qos-ch/logback#885).\n\nThe toolkit now compiles against logback 1.6.5, so an API removal fails the\nbuild. LogbackVersionCompatibilityTest renders both layouts against logback\n1.2.13, 1.3.16, 1.4.14, 1.5.12, 1.5.14, 1.5.38 and 1.6.5, each loaded in an\nisolated class loader.\n\nAdd apm-toolkit-logback-scenario, the first plugin test of the logback\ntoolkit and its agent activation. It runs logback 1.2.x to 1.5.x with the\nreleased toolkit and checks the trace ID and SkyWalking context rendered by\nboth layouts, including behind an AsyncAppender, through the gRPC log\nreporter.\n\n* Replace the conversion rule registry instead of modifying it\n\nRegister the SkyWalking conversion words by replacing the context\u0027s\nconversion rule registry with an updated copy, under the context monitor\nheld only for the copy. Layouts starting concurrently, from any class\nloader, keep each other\u0027s words, and logback reads a registry that is\nnever modified afterwards, so no lock is held while logback creates and\nstarts the converters. Nothing is copied once the words are registered.\n\nOn logback before 1.5.14, which also writes \u003cconversionRule\u003es to this\nregistry, a rule logback registers at the same time as a layout starts in\nanother thread may be lost; this is documented.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "60a230e812c6f4b9904fcdd1a17a0bed61cb9401",
      "old_mode": 33188,
      "old_path": ".github/workflows/plugins-jdk17-test.0.yaml",
      "new_id": "73aa926c3c7d742e4a64fd71bb457781383bc4eb",
      "new_mode": 33188,
      "new_path": ".github/workflows/plugins-jdk17-test.0.yaml"
    },
    {
      "type": "modify",
      "old_id": "add61965cb1a04fbb10a3033d3b4c8bf389b46bc",
      "old_mode": 33188,
      "old_path": "CHANGES.md",
      "new_id": "ca82a5c4274e61003ec93d2aa1322aa5f7ece308",
      "new_mode": 33188,
      "new_path": "CHANGES.md"
    },
    {
      "type": "modify",
      "old_id": "7a99852187ba57c98c1ce28035e867da7b27bceb",
      "old_mode": 33188,
      "old_path": "apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml",
      "new_id": "3a1c209e239b193e71405510ee44e0c15df1da5b",
      "new_mode": 33188,
      "new_path": "apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dec440678300b12e8777bd264b1cc488655c4425",
      "new_mode": 33188,
      "new_path": "apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/AbstractTraceIdPatternLogbackLayout.java"
    },
    {
      "type": "modify",
      "old_id": "8a85b4dc4728010cf63a9e1229e7ebd06a513614",
      "old_mode": 33188,
      "old_path": "apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/TraceIdPatternLogbackLayout.java",
      "new_id": "03be856e07aeafff25e9d8fd4bf182f4fc0c0fb5",
      "new_mode": 33188,
      "new_path": "apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/TraceIdPatternLogbackLayout.java"
    },
    {
      "type": "modify",
      "old_id": "861705965ade8f536636f05665d5a6fe72f591e4",
      "old_mode": 33188,
      "old_path": "apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/mdc/TraceIdMDCPatternLogbackLayout.java",
      "new_id": "6003a19bef042f44a4089f7e5db150d428e4a249",
      "new_mode": 33188,
      "new_path": "apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/mdc/TraceIdMDCPatternLogbackLayout.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "70d7f3749e4acd5fbf6fb4be1e1c4f87e4924315",
      "new_mode": 33188,
      "new_path": "apm-application-toolkit/apm-toolkit-logback-1.x/src/test/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/LayoutProbe.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "050f7c85d13a71a9f5e4e0e2ecb73a545c92ba9c",
      "new_mode": 33188,
      "new_path": "apm-application-toolkit/apm-toolkit-logback-1.x/src/test/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/LogbackVersionCompatibilityTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "490a12cde0dbe4abe7fb9cb9ac8cb95826a520e5",
      "new_mode": 33188,
      "new_path": "apm-application-toolkit/apm-toolkit-logback-1.x/src/test/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/TraceIdPatternLogbackLayoutTest.java"
    },
    {
      "type": "modify",
      "old_id": "8023dfed504786183708fdcdf519829d3d643c22",
      "old_mode": 33188,
      "old_path": "docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md",
      "new_id": "f1651d3ca99dc10766c1a682d24000ee2ced837a",
      "new_mode": 33188,
      "new_path": "docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0a9664ba2aff105b474f0bdb04f6a5d085f33c12",
      "new_mode": 33261,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/bin/startup.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5c4bce6a9576c0e9650fcb8bf4380e292cd8d851",
      "new_mode": 33188,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/config/expectedData.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4934b914bb5bd90484ff062aeaf8ee83eda182be",
      "new_mode": 33188,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/configuration.yml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a8cd02cd976a05bd28908dc82c435dc43ccbd82c",
      "new_mode": 33188,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/pom.xml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "56e63cbce3d072016cd07271ee37ae13a5c339fd",
      "new_mode": 33188,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/src/main/assembly/assembly.xml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "607e31a977a2ba0da5babf2f6d917b5cdd33eab4",
      "new_mode": 33188,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/src/main/java/test/apache/skywalking/apm/testcase/logback/Application.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3cfe5918a42d67f7d756f80755057666a58cfc90",
      "new_mode": 33188,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/src/main/java/test/apache/skywalking/apm/testcase/logback/CaseHandler.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ac1770418fdd54842ab01fe7bfe7858050ff5577",
      "new_mode": 33188,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/src/main/resources/logback.xml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b0bc5ed058314b77733bf24647b36f38e3994ccd",
      "new_mode": 33188,
      "new_path": "test/plugin/scenarios/apm-toolkit-logback-scenario/support-version.list"
    }
  ]
}
