This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new fbcaf23661 Fix LogBuilder tagsRawData to include LAL-added tags
(#13748)
fbcaf23661 is described below
commit fbcaf236619d592ce282f5aa6d426a39423f86f0
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Wed Mar 18 10:25:47 2026 +0800
Fix LogBuilder tagsRawData to include LAL-added tags (#13748)
tagsRawData only contained original LogData tags from the agent, causing
LAL-added tags (via `tag 'key': value`) to be missing from the UI tag display
and Kafka export. Merge both original and LAL-added tags into a single LogTags
protobuf for tagsRawData.
---
.../oap/server/core/source/LogBuilder.java | 30 +++++++++++++++++++---
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/LogBuilder.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/LogBuilder.java
index a49ffc83cb..8f64d53072 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/LogBuilder.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/LogBuilder.java
@@ -28,8 +28,10 @@ import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
import org.apache.skywalking.apm.network.logging.v3.LogData;
import org.apache.skywalking.apm.network.logging.v3.LogDataBody;
+import org.apache.skywalking.apm.network.logging.v3.LogTags;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
@@ -209,17 +211,37 @@ public class LogBuilder implements LALOutputBuilder {
log.setContentType(ContentType.JSON);
log.setContent(body.getJson().getJson());
}
- // raw tags from original LogData
- if (logData.getTags().getDataCount() > 0) {
- log.setTagsRawData(logData.getTags().toByteArray());
- }
}
+ // raw tags: merge original LogData tags + LAL-added tags
+ log.setTagsRawData(buildMergedTagsRawData());
// searchable tags from LogData + LAL-added tags
log.getTags().addAll(collectSearchableTags());
return log;
}
+ /**
+ * Build merged tagsRawData from original LogData tags + LAL-added tags.
+ * Returns null if there are no tags at all.
+ */
+ private byte[] buildMergedTagsRawData() {
+ final boolean hasOriginal = logData != null &&
logData.getTags().getDataCount() > 0;
+ if (!hasOriginal && lalTags.isEmpty()) {
+ return null;
+ }
+ final LogTags.Builder builder = LogTags.newBuilder();
+ if (hasOriginal) {
+ builder.addAllData(logData.getTags().getDataList());
+ }
+ for (final String[] kv : lalTags) {
+ builder.addData(KeyStringValuePair.newBuilder()
+ .setKey(kv[0])
+ .setValue(kv[1])
+ .build());
+ }
+ return builder.build().toByteArray();
+ }
+
private Collection<Tag> collectSearchableTags() {
final HashSet<Tag> result = new HashSet<>();
if (SEARCHABLE_TAG_KEYS != null) {