{"record":{"id":"969bf7027ea3c726","repo":"apache/skywalking","slug":"unknown-log-field-log-name-supported-metadata","errorCode":null,"errorMessage":"Unknown log field: log.{name}. Supported metadata fields: {metadataGetters}, traceContext.{traceGetters}, LogData fields: {logGetters}","messagePattern":"Unknown log field: log\\.(.+?)\\. Supported metadata fields: (.+?), traceContext\\.(.+?), LogData fields: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/v2/compiler/LALValueCodegen.java","lineNumber":965,"sourceCode":"                            + LALCodegenHelper.METADATA_GETTERS.get(name) + \"()\";\n                        if (LALCodegenHelper.LONG_FIELDS.contains(name)) {\n                            needsBoxing = true;\n                            boxType = \"Long\";\n                        }\n                    }\n                } else if (i == 0 && LALCodegenHelper.LOG_GETTERS.containsKey(name)) {\n                    current = current + \".\"\n                        + LALCodegenHelper.LOG_GETTERS.get(name) + \"()\";\n                } else if (i == 1 && current.endsWith(\".getTraceContext()\")\n                        && LALCodegenHelper.METADATA_TRACE_GETTERS.containsKey(name)) {\n                    current = current + \".\"\n                        + LALCodegenHelper.METADATA_TRACE_GETTERS.get(name) + \"()\";\n                    if (LALCodegenHelper.INT_FIELDS.contains(name)) {\n                        needsBoxing = true;\n                        boxType = \"Integer\";\n                    }\n                } else {\n                    throw new IllegalArgumentException(\n                        \"Unknown log field: log.\" + name\n                            + \". Supported metadata fields: \"\n                            + LALCodegenHelper.METADATA_GETTERS.keySet()\n                            + \", traceContext.\"\n                            + LALCodegenHelper.METADATA_TRACE_GETTERS.keySet()\n                            + \", LogData fields: \"\n                            + LALCodegenHelper.LOG_GETTERS.keySet());\n                }\n            } else if (seg instanceof LALScriptModel.MethodSegment) {\n                current = appendMethodSegment(current,\n                    (LALScriptModel.MethodSegment) seg, null);\n            }\n        }\n\n        if (needsBoxing) {\n            sb.append(boxType).append(\".valueOf(\").append(current).append(\")\");\n        } else {\n            sb.append(current);","sourceCodeStart":947,"sourceCodeEnd":983,"githubUrl":"https://github.com/apache/skywalking/blob/102af09b4a56064e22050dded10e2c52e490d040/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/v2/compiler/LALValueCodegen.java#L947-L983","documentation":"Same family as the unknown-first-field error, but thrown for a field at a deeper position in a log.* chain: the codegen allows a metadata getter only at i==0, a LogData getter only at i==0, and a trace-context getter (traceId, traceSegmentId, spanId) only at i==1 directly after .getTraceContext(). Anything else — including metadata fields nested at depth > 0 — hits this throw. The message lists all three supported key sets.","triggerScenarios":"log.traceContext.spanId written as a deeper chain than allowed (e.g. log.ctx.traceId); log.body.nested.field (body is a String/byte tail, not navigable); log.service.extra; putting a LogData field at position 1 like log.traceContext.body.","commonSituations":"Trying to navigate into log.body as if it were a parsed object; assuming arbitrary depth navigation on metadata objects; chaining after log.tags expecting map-style access (use tag(\"KEY\") instead).","solutions":["Keep chains to the shapes the compiler supports: log.<metadataField>, log.<logDataField>, log.traceContext.<traceField>","To read a tag, use tag(\"KEY\") instead of log.tags[...]","To inspect the body, add a json{}/yaml{}/text{} parser and use parsed.*"],"exampleFix":"# before\nextractor {\n  traceId log.body.traceId as String\n}\n\n# after\nfilter {\n  json { }\n  extractor {\n    traceId parsed.traceId as String\n  }\n}","handlingStrategy":"validation","validationCode":"# Legal chain shapes:\n#   log.<metadataField>\n#   log.<logDataField>\n#   log.traceContext.<traceId|traceSegmentId|spanId>\n# grep -oE 'log\\.[A-Za-z.]+' my-rule.yaml | sort -u   # review each against the shapes","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never navigate deeper than the three legal shapes","Use parsers + parsed.* for body-derived values","Watch casing: traceContext, not tracecontext"],"tags":["lal","log-analyzer","compiler","field-access"],"backgroundTag":null,"analyzedSha":"102af09b4a56064e22050dded10e2c52e490d040","analyzedAt":"2026-08-14T10:47:52.647Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}