---
title: "Origin Selector"
description: "select the source code/binary executable origin of TenXTemplate symbol\
  \ values"
source: "https://github.com/log-10x/modules/tree/main/pipelines/run/units/transform/symbol/unit.yaml"
icon: "material/origin"

---
Identify the source code/binary executable origin of [symbol](https://doc.log10x.com/run/transform/structure/#symbols) values within [TenXTemplate](https://doc.log10x.com/engine/design/#optimization-model) hidden classes.

Identifying where each symbol value originated from within TenXTemplates enables [reflective programming](https://en.wikipedia.org/wiki/Reflective_programming){target="\_blank"} wherein [TenXObjects](https://doc.log10x.com/api/js/#TenXObject "Provide structured, reflective access to log/trace events read from input(s).")
can inspect their structure and member types and source code/executable file origin.

Each symbol lists its file of origin (e.g., foo.js, sudo, acme.dll) and the
[context](#contexts) in which it appears in it (e.g., class/func/enum name, string format..).

Source code/executable origin information is accessible at run time via the [symbol](https://doc.log10x.com/api/js/#TenXObject+symbol),
[symbolSequence](https://doc.log10x.com/api/js/#TenXObject+symbolSequence), and [symbolOrigin](https://doc.log10x.com/api/js/#TenXObject+symbolOrigin) functions.

```js
this.class = this.symbol("class");
this.sequence = this.symbolSequence("log,exec"); 
this.origin = this.symbolOrigin("log,exec");
```

For the following Apache Spark [log event](https://github.com/logpai/loghub/blob/20168f0fc076be8a75d22c01896076090d4a3c6e/Spark/Spark_2k.log#L14){target="\_blank"}:

> 17/06/09 20:10:42 INFO executor.CoarseGrainedExecutorBackend: Connecting to driver: spark://CoarseGrainedScheduler@10.10.34.11:48069

|Field|Value|
|---|---|
|class|CoarseGrainedExecutorBackend|
|sequence|Connecting to driver|
|origin|[CoarseGrainedExecutorBackend.scala](https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/executor/CoarseGrainedExecutorBackend.scala){target="\_blank"}|

For the following Unix [log event](https://github.com/logpai/loghub/blob/20168f0fc076be8a75d22c01896076090d4a3c6e/Linux/Linux_2k.log#L3){target="\_blank"}:

> Jun 14 15:16:02 combo sshd(pam\_unix)\[19937\]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=218.188.2.4

|Field|Value|
|---|---|
|class|""|
|sequence|authentication failure|
|origin|[sshd](https://linux.die.net/man/8/sshd){target="\_blank"}|

## Contexts

Compile [scanners](https://doc.log10x.com/compile/scan/ "Capture symbol values from source code/binary files and link to an output symbol library") assigns each extracted [symbol](https://doc.log10x.com/run/transform/structure/#symbols)
value within a target source code/binary file a _context_ which describes its meaning and position within the file.

Supported contexts include:

### **`package`**

Source code package/namespace name. For example:

```java
package com.acme.client.core;

  public class AcmeLogic {
  ...  
  }
```

```c#
namespace MyCompany.Proj1
{
    class MyClass1
    {
      ...
    }
}
```

### **`class`**

Source code class/interface definition. For example:

```python
class AcmeClient:
...
```

```java
public interface AcmeServer {...}
```

The scanner will capture _AcmeServer_, _AcmeClient_ as **class** symbols.

The scanner will capture _com.acme.client.core_, _MyCompany.Proj1_ as **package** symbols.

### **`method`**

Source code method/function name. For example:

```js
function hostError(host) {...}
```

```cpp
void Person::get_name() {
```

The scanner will capture _hostError_, _get\_name_ as **method** symbols

### **`enum`**

Source code enum literal value. For example:

```py
from enum import Enum

class STATUS(Enum):
OK = 1
FAIL = 2
RETRY = 3
```

The scanner will capture:

- _OK_, _FAIL_, _RETRY_  as **enum** symbols
- _STATUS_  as a **class** symbol

### **`log`**

Source code constant arg within a [logging](https://doc.log10x.com/compile/scan/logMethods/) method. For example:

```js
function hostError(host) {
  //The "error connecting" symbol passes as an indirect arg to the logger
  var msg = fmtError("error connecting", host);
  console.error(msg); 
} 
```

The scanner will capture _error connecting_ as a **log** symbol.

### **`const`**

Source code  constant value assigned to a variable, parameter or code annotation. For example:

```java
@JsonElement(key = "price")
public String price;
```

```js
report("state: " + state);
```

```js
this.key = "key";
```

The scanner will capture _price_, _state_, _key_  as a **const** symbol.

### **`exec`**

Symbol captured from a custom program or OS command via the [executable](https://doc.log10x.com/compile/scanner/executable "Launch a target process from which to read symbol values via its stdout") symbol scanner
(e.g., [strings](https://linux.die.net/man/1/strings){target="\_blank"}).

For example:

```console
strings -a /usr/bin/sudo
```

The scanner will capture _Authentication failure message %s_  as an **exec** symbol.

### **`text`**

Config field name/value captured from file (e.g., .xml, .json) via the [text](https://doc.log10x.com/compile/scanner/text/ "Scan text/binary files for symbol values using the Jackson library") symbol scanner.

For example:

```yaml
spring:
  name: test
  environment: testing
```

The scanner will capture the field names _spring_, _name_, and _environment_  as **text** symbols.

The _test_ and _testing_ field values are only captured as text if the [textScanFieldValues](https://doc.log10x.com/compile/scanner/text/#textscanfieldvalues "controls whether to capture Jackson parser field values") is set to true.

## :material-wrench-outline: Config Files

To configure the Origin selector unit, [:material-cog: Edit](https://doc.log10x.com/config/app/#module-config "Learn how to edit app and module configurations") these files.  

Below is the default configuration from: [symbol/config.yaml](https://github.dev/log-10x/config/blob/main/pipelines/run/transform/symbol/config.yaml "symbol/config.yaml"){target="\_blank"}.  
  
<div class="edit-options">
    <a class="md-button tenx-edit-online-button" data-tooltip="Edit online on github.dev" href="https://github.dev/log-10x/config/blob/main/pipelines/run/transform/symbol/config.yaml" target="_blank" rel="noopener noreferrer">
        <span class="twemoji" style="margin-right: 0.3rem;">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path>
            </svg>
        </span> Edit Online
    </a>
    <button class="md-button tenx-config.yaml0-edit-button" data-tooltip="Edit configuration file" data-dialog-id="config-yaml0-dialog">
        <span style="margin-right: 0.3rem;">
            <span class="twemoji">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                    <path d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                </svg>
            </span>
        </span>Edit Locally
    </button>
</div>

<dialog id="config-yaml0-dialog" class="md-dialog md-dialog--editor">
    <div class="editor-dialog-wrapper">
        <div class="editor-dialog-header">
            <span class="editor-dialog-title">Edit config.yaml Locally</span>
            <div class="editor-header-actions">
                <button class="editor-toolbar-btn yaml-editor-locations" data-tooltip="Save">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path></svg>
                </button>
                <button class="editor-toolbar-btn yaml-editor-reset" data-tooltip="Reset to default">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M12.5 8c-2.65 0-5.05 1-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"></path></svg>
                </button>
                <button class="editor-toolbar-btn yaml-editor-copy" data-tooltip="Copy to clipboard">
                    <svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path></svg>
                    <svg class="icon-check" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg>
                </button>
                <span class="header-divider"></span>
                <button class="editor-toolbar-btn yaml-editor-fullscreen" data-tooltip="Fullscreen">
                    <svg class="icon-maximize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z"></path></svg>
                    <svg class="icon-minimize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M5,16H8V19H10V14H5V16M14,14V19H16V16H19V14H14M16,5V8H19V10H14V5H16M10,5V10H5V8H8V5H10Z"></path></svg>
                </button>
                <span class="header-divider"></span>
                <button class="editor-toolbar-btn editor-dialog-close" onclick="closeDialog('config-yaml0-dialog')" data-tooltip="Close">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path></svg>
                </button>
            </div>
        </div>
        <div class="editor-dialog-content">
            <div class="yaml-editor-container"></div>
        </div>
        <div class="yaml-editor-statusbar">
            <span class="yaml-editor-status"></span>
        </div>
    </div>
    <!-- Locations Popup -->
    <div class="locations-popup" style="display: none;">
        <div class="locations-popup-content">
            <div class="locations-popup-header">
                <span class="locations-header-label">Download and save to:</span>
                <button class="locations-popup-close" aria-label="Close">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16">
                        <path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path>
                    </svg>
                </button>
            </div>
            <ul class="locations-list">
                <li>
                    <span class="location-label">Linux / Docker / macOS
                        <span class="help-icon" data-tooltip="Default system location. The engine automatically reads configs from here at startup. Best for production deployments.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="default-path location-path" data-tooltip=""
                            data-copy-osx="/etc/log10x/config/run/transform/symbol/config.yaml"
                            data-copy-nix="/etc/log10x/config/run/transform/symbol/config.yaml"
                            data-copy-win="C:\log10x\configs/run/transform/symbol/config.yaml"></code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
                <li>
                    <span class="location-label">Custom directory
                        <span class="help-icon" data-tooltip="Set TENX_CONFIG environment variable to point to a custom config directory. Useful when you want configs in a non-standard location.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="location-path" data-tooltip="$TENX_CONFIG/run/transform/symbol/config.yaml">$TENX_CONFIG/run/transform/symbol/config.yaml</code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
                <li>
                    <span class="location-label">Within cloned repo
                        <span class="help-icon" data-tooltip="First run: git clone github.com/log-10x/config. Then save the file to this path within the cloned folder. Use for version control.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="location-path" data-tooltip="./pipelines/run/transform/symbol/config.yaml">./pipelines/run/transform/symbol/config.yaml</code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
            </ul>
            <div class="locations-popup-footer">
                <button class="locations-download-btn" title="Download config file">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                        <path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path>
                    </svg>
                    <span>Download</span>
                </button>
            </div>
        </div>
    </div>
</dialog>

<template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgIm1heE9yaWdpbnMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXggbnVtYmVyIG9mIHNvdXJjZS9iaW5hcnkgb3JpZ2lucyB0byBsaXN0IHBlciBzeW1ib2xcblxuQ29udHJvbHMgdGhlIG51bWJlciBvZiBzb3VyY2UgY29kZS9iaW5hcnkgb3JpZ2lucyB0byBsaXN0IHBlciBzeW1ib2wgdG9rZW4gc2VxdWVuY2UuIEFzIGEgc2VyaWVzIG9mIHRva2VucyB3aXRoaW4gIGEgZ2l2ZW4gdGVtcGxhdGUgKGUuZy4sICdFUlJPUicsICdjb3VsZCBub3QgY29ubmVjdCB0byBcInt9JykgbWF5IGFwcGVhciAgaW4gbXVsdGlwbGUgc291cmNlL2JpbmFyeSBmaWxlcyB3aXRoaW4gdGhlIHBpcGVsaW5lJ3Mgc3ltYm9sIGZpbGVzLCB0aGUgc29ydGluZyBhbGdvcml0aG0gc2VsZWN0cyBbbWF4U3ltYm9sT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sbWF4b3JpZ2lucykgZm9yIGNvbXBhcmlzb24uIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IDY0KSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiA2NAogICAgICAgIH0sCiAgICAgICAgImRlYnVnIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAib3JpZ2lucyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTGlzdCBvZiBzb3VyY2Ugc2Nhbm5lZCBmaWxlIG5hbWVzIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb25cblxuU3BlY2lmaWVzIGEgbGlzdCBvZiBpbnB1dCBmaWxlIG5hbWVzIHdpdGhpbiB0aGUgbG9hZGVkIHN5bWJvbCBsaWJyYXJ5IChlLmcuLCAnbXkuc2NhbGEnLCAnZm9vLmphdmEnKSBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIG9uIGlmL2hvdyB0aGV5IHBhcnRpY2lwYXRlIGluIHNlbGVjdGluZyB0aGUgb3JpZ2luIG9mIGEgdGFyZ2V0IFRlblhUZW1wbGF0ZSBzeW1ib2wgc2VxdWVuY2UuIFRoaXMgb3B0aW9uIGhlbHBzIGRlYnVnIGhvdyB0aGUgW3N5bWJvbFNlcXVlbmNlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCtzeW1ib2xTZXF1ZW5jZSkgZnVuY3Rpb24gc2VsZWN0cyAgb3JpZ2luIHZhbHVlcyBmb3IgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gIFNwZWNpZnkgJyonIGZvciBhbGwgaW5wdXQgZmlsZXMuIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzeW1ib2xzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIFRlblhUZW1wbGF0ZSBzeW1ib2wgdmFsdWVzIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb25cblxuTGlzdCBvZiBzeW1ib2wgdmFsdWVzIHN1Y2ggYXMgY2xhc3MgYW5kIG1ldGhvZCBuYW1lcyhlLmcuLCAnTXlDbGFzcycsICdmb28nKSBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIG9uIGhvdyB0aGVpciBvcmlnaW4gaW5mb3JtYXRpb24gaXMgc2VsZWN0ZWQuIFRoaXMgb3B0aW9uIGhlbHBzIGRlYnVnIGhvdyB0aGUgW3N5bWJvbFNlcXVlbmNlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCtzeW1ib2xTZXF1ZW5jZSkgZnVuY3Rpb24gc2VsZWN0cyAgb3JpZ2luIHZhbHVlcyBmb3IgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gIFNwZWNpZnkgJyonIGZvciBhbGwgc3ltYm9scy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImxvZ2dlck5hbWUiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRGVidWcgbG9nZ2VyIG5hbWVcblxuQ29udHJvbHMgdGhlIG5hbWUgb2YgdGhlIGxvZzRqIGxvZ2dlciB1c2VkIGJ5IFtkZWJ1Z09yaWdpbnNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbGRlYnVnb3JpZ2lucykgYW5kIFtkZWJ1Z1N5bWJvbHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbGRlYnVnc3ltYm9scykuIChEZWZhdWx0OiBbY29uc29sZU91dF0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvY29uZmlnL2Jsb2IvbWFpbi9sb2c0ajIueWFtbCNMNjYpKSIsCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogIltjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9</template>

```yaml
# 🔟❎ 'run' symbol origin configuration

# Identify the origin of symbol values within TenXTemplates.
# To learn more see https://doc.log10x.com/run/transform/symbol/

# Set the 10x pipeline to 'run'
tenx: run

# =============================== Origin Options ==============================

symbol:

  # 'maxOrigins' controls the number of source/binary origins to list 
  #  per symbol token sequence. As a series of tokens within 
  #  a target TenXTemplate (e.g., 'ERROR', 'could not connect to "{}') may appear 
  #  in multiple source/binary files within the pipeline's loaded library.
  #  The sorting algorithm configured below is used to select the 'maxSymbolOrigins' 
  #  topmost entries to list.
  maxOrigins: 64
  
  # 'sequenceReserved' defines a list of terms to ignore when searching
  #  for the symbol tokens that constitute an TenXTemplate's 'message' portion.
  #  For example, for an event whose text contains: 'connect success = true',
  #  the value 'true' will not be considered a part of the event's message,
  #  as the 'true' value is mostly likely the result of a variable boolean state.
  #  For more information, see: https://doc.log10x.com/api/js/#TenXObject+symbolSequence
  sequenceReserved:
    # literals
    - "null"
    - "nil"
    - "true"
    - "false"
    # stopwords (articles, conjunctions, prepositions)
    - "a"
    - "an"
    - "the"
    - "to"
    - "of"
    - "in"
    - "on"
    - "at"
    - "by"
    - "for"
    - "from"
    - "with"
    - "and"
    - "or"
    - "as"
    - "is"
    # generic log words
    - "log"
    - "logger"
    - "logs"
    - "http"
    - "https"
    # severity levels, uppercase
    - TRACE
    - DEBUG
    - INFO
    - NOTICE
    - WARN
    - WARNING
    - ERROR
    - ERR
    - CRITICAL
    - CRIT
    - ALERT
    - EMERGENCY
    - EMERG
    - FATAL
    - PANIC
    # severity levels, lowercase (engine matching is case-sensitive).
    # Note. The token "error" is intentionally NOT reserved here.
    # Verification against 3254 demo events (2026-05-20) found 1280
    # signal hits where the "error" key carries the actual message
    # body the pattern groups; reserving it would collapse distinct
    # error patterns into one.
    # Note. The token "emergency" is also intentionally NOT reserved
    #, sample showed only prose hits, no envelope use observed.
    - "trace"
    - "debug"
    - "info"
    - "notice"
    - "warn"
    - "warning"
    - "err"
    - "critical"
    - "crit"
    - "alert"
    - "fatal"
    - "panic"
    # severity-equivalent envelope keys
    - "level"
    - "levelname"
    - "severity"
    # envelope time keys
    - "time"
    - "timestamp"
    - "ts"
    - "msg"
    - "message"
    # OpenTelemetry / collector envelope (these tokens leak from the
    # otelcol's Go-package logging into pattern names)
    - "otel"
    - "otelcol"
    - "opentelemetry"
    - "collector"
    - "contrib"
    - "processor"
    - "processors"
    - "receiver"
    - "receivers"
    - "exporter"
    - "exporters"
    - "pipeline"
    - "pipelines"
    # structured / envelope keys (singular + plural, engine matcher
    # is exact, no stem; both forms appear in real otel logs).
    # Note: "trace" is already reserved above under lowercase severity.
    - "service"
    - "services"
    - "instance"
    - "instances"
    - "component"
    - "components"
    - "signal"
    - "signals"
    - "resource"
    - "resources"
    - "scope"
    - "scopes"
    - "attribute"
    - "attributes"
    - "traces"
    - "span"
    - "spans"
    - "flag"
    - "flags"
    - "context"
    - "contexts"
    - "baggage"
    # K8s audit / Kubernetes API envelope (verified zero signal in
    # the 2026-05-20 sample, every occurrence was a JSON metadata
    # key or audit field)
    - "metadata"
    - "namespace"
    - "verb"
    - "uid"
    - "identity"
    - "protocol"
    - "priority"
    - "encoding"
    - "headers"
    - "duration"
    # HTTP / request envelope (verified safe, appear only as
    # klog field markers or JSON keys, not as message content)
    - "path"
    - "status"
    # generic identity keys (very common envelope tokens in JSON logs)
    - "id"
    - "name"
    - "kind"
    - "version"
    - "type"
    # source-location envelope (Go / Java / Python loggers leak these)
    - "caller"
    - "func"
    - "function"
    - "file"
    - "line"
    - "module"
    - "package"
    - "class"
    - "method"
    - "stack"
    - "stacktrace"
    # process / runtime context.
    # Note. The token "host" is intentionally NOT reserved, 1018 of
    # 1024 occurrences in the verification corpus were the content
    # phrase "no such host" inside DNS-failure messages; reserving
    # it would collapse every "no such host" pattern into one.
    # Note. The token "app" is intentionally NOT reserved, 42 of 44
    # occurrences were the Flask logger-name discriminator in
    # "INFO in app:" lines; reserving it would collapse Python-app
    # logger structure.
    - "pid"
    - "tid"
    - "process"
    - "thread"
    - "hostname"
    - "application"
    # package-qualifier prefixes (Go / Java loggers embed these in
    # source-path tokens like `com.foo.bar.MyLogger`)
    - "com"
    - "org"
    - "io"
    - "net"
    # tokenizer artifacts
    - "t"

  # ----------------------------- Debug Options -------------------------------
  
  debug:
 
    # 'symbol' debugging allows for verbose printing of the selection process
    #  for symbol tokens from the pipeline's 10x symbol files used to produce the
    #  results of 10x reflection functions.
    #  For more information, see: https://doc.log10x.com/api/js/#TenXObject+symbol
    

   # 'loggerName' controls the name of the log4j logger used by origins and symbols below
    loggerName: "symbolDebugger"

    # 'origins' outputs information about the origin selection process for an TenXTemplate symbol.
    #  For example, setting 'units' to 'foo.js' will output information about if/how it 
    #  was selected as the origin of TenXTemplate symbols.
    #  In other words, if a symbol (e.g., 'MyClass') has 'foo.java' as the source file
    #  from which it originated, adding 'foo.js' to 'units' will emit information
    #  about the selection process.
    #  Specifying '*' will emit information for all source /binary files that have
    #  been selected as the origin of any TenXTemplate objects within the pipeline.
    origins: [
    #  '*'
    ]

    # 'symbols' logs the origin selection process for symbol tokens within an TenXTemplate.
    #  For example, set 'symbols' to 'Could not connect to' to log how the 10x JavaScript 'symbolSequence' 
    #  determines the origin source code/binary file within the pipeline's symbol library. 

    #  Specifying '*' will emit information for all source code /binary files that have
    #  been selected as the origin of any TenXTemplate objects within the pipeline.
    symbols: [
    #  '*'
    ]
```

## :material-menu: Options

Specify the options below to [configure](/config "configure") the Origin selector:

|Name|Description|Category|
|---|---|---|
|[symbolSequenceReserved](#symbolsequencereserved "list of terms to ignore when scanning symbol tokens")|List of terms to ignore when scanning symbol tokens|Symbol|
|[symbolMaxOrigins](#symbolmaxorigins "max number of source/binary origins to list per symbol")|Max number of source/binary origins to list per symbol|Symbol|
|[symbolDebugOrigins](#symboldebugorigins "list of source scanned file names for which to log information")|List of source scanned file names for which to log information|Debug|
|[symbolDebugSymbols](#symboldebugsymbols "list of TenXTemplate symbol values for which to log information")|List of TenXTemplate symbol values for which to log information|Debug|
|[symbolDebugLoggerName](#symboldebugloggername "debug logger name")|Debug logger name|Debug|

### Symbol

#### :material-menu-right-outline:**`symbolSequenceReserved`**

List of terms to ignore when scanning symbol tokens.

|Type|Default|Category|
|---|---|---|
|List|\[null, nil, true, false\]|Symbol|

Defines a list of terms that to ignore when searching for the symbol tokens constituting an
TenXTemplate's 'message' portion (i.e., the [symbol](https://doc.log10x.com/run/transform/structure/#symbols) tokens of the origin
ranked highest by coverage, meaning the count of distinct library-known tokens it explains; span length is the last tiebreak).
For example, for an TenXObject whose text contains: 'connect success = true',
the value 'true' will not be considered a part of the instance's message,
as it is mostly likely the result of a variable boolean state.
To learn more see [symbolSequence](https://doc.log10x.com/api/js/#TenXObject+symbolSequence).


#### :material-menu-right-outline:**`symbolMaxOrigins`**

Max number of source/binary origins to list per symbol.

|Type|Default|Category|
|---|---|---|
|Number|64|Symbol|

Controls the number of source code/binary origins to list
per symbol token sequence. As a series of tokens within
a given template (e.g., 'ERROR', 'could not connect to "{}') may appear
in multiple source/binary files within the pipeline's symbol files,
the sorting algorithm selects [maxSymbolOrigins](https://doc.log10x.com/run/transform/symbol/#symbolmaxorigins "max number of source/binary origins to list per symbol") for comparison.


### Debug

#### :material-menu-right-outline:**`symbolDebugOrigins`**

List of source scanned file names for which to log information.

|Type|Default|Category|
|---|---|---|
|List|\[\]|Debug|

Specifies a list of input file names within the loaded symbol library (e.g., 'my.scala', 'foo.java')
for which to log information on if/how they participate in selecting the origin of a target TenXTemplate symbol sequence.
This option helps debug how the [symbolSequence](https://doc.log10x.com/api/js/#TenXObject+symbolSequence) function selects
origin values for a target TenXTemplate symbol sequence.

Specify '\*' for all input files.


#### :material-menu-right-outline:**`symbolDebugSymbols`**

List of TenXTemplate symbol values for which to log information.

|Type|Default|Category|
|---|---|---|
|List|\[\]|Debug|

List of symbol values such as class and method names(e.g., 'MyClass', 'foo')
for which to log information on how their origin information is selected.
This option helps debug how the [symbolSequence](https://doc.log10x.com/api/js/#TenXObject+symbolSequence) function selects
origin values for a target TenXTemplate symbol sequence.

Specify '\*' for all symbols.


#### :material-menu-right-outline:**`symbolDebugLoggerName`**

Debug logger name.

|Type|Default|Category|
|---|---|---|
|String|[consoleOut](https://github.com/log-10x/config/blob/main/log4j2.yaml#L66 "consoleOut"){target="\_blank"}|Debug|

Controls the name of the log4j logger used by [debugOrigins](https://doc.log10x.com/run/transform/symbol/#symboldebugorigins "list of source scanned file names for which to log information") and [debugSymbols](https://doc.log10x.com/run/transform/symbol/#symboldebugsymbols "list of TenXTemplate symbol values for which to log information").


<br/>:material-github: This unit is defined in [symbol/unit.yaml](https://github.com/log-10x/modules/tree/main/pipelines/run/units/transform/symbol/unit.yaml "symbol/unit.yaml"){target="\_blank"}.

