> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Funktionsparameter hinzufügen

export const Compatibility = ({versions = [], label = "Available in"}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const defaultPillStyle = {
    borderColor: "#d4d4d8",
    background: "#f4f4f5",
    color: "#3f3f46"
  };
  const pillStyles = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#d8b4fe",
      color: "#6b21a8"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde047",
      color: "#854d0e"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#5eead4",
      color: "#115e59"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde047",
      color: "#854d0e"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#86efac",
      color: "#166534"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#93c5fd",
      color: "#1e40af"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fca5a5",
      color: "#991b1b"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fdba74",
      color: "#9a3412"
    }
  };
  const getPillStyle = name => ({
    ...defaultPillStyle,
    ...pillStyles[name] || ({})
  });
  return <div className="not-prose my-4 rounded-lg border border-zinc-200 bg-zinc-50 px-4 py-3 text-sm dark:border-white/10 dark:bg-white/5">
      <div className="flex flex-wrap items-center gap-x-2 gap-y-1">
        <span className="font-semibold text-zinc-700 dark:text-zinc-200">
          {label}:
        </span>
        {versions.map((v, i) => <span key={`${v.name}-${v.version}-${i}`} className="inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium" style={getPillStyle(v.name)}>
            <span>{v.name}</span>
            <span className="opacity-70">
              {v.version}
              {v.exact ? "" : "+"}
            </span>
          </span>)}
      </div>
    </div>;
};

<Compatibility versions={[{ name: "AppSignal for PHP", version: "0.5.0" }]} />

<Compatibility versions={[{ name: "AppSignal Collector", version: "0.6.0" }]} />

PHP und die durch unsere OpenTelemetry-Beta unterstützten Sprachen können Funktionsparameter setzen.
Funktionsparameter sind für Background-Jobs und Skripte gedacht und nicht zum Speichern von Parametern für jeden Funktionsaufruf in einem Trace.

<Warning>
  🔐 Senden Sie keine <strong>personenbezogenen Daten (Personal Identifiable Information, PII)</strong> an AppSignal. Filtern Sie PII (z. B. Namen, E-Mail-Adressen) und verwenden Sie stattdessen eine ID, einen Hash oder einen pseudonymisierten Bezeichner. <br /> <br /> Verwenden Sie [Link Templates](https://docs.appsignal.com/application/link-templates), um sie in Ihrer Anwendung zurückzuverknüpfen.
</Warning>

Aus Gründen der Sicherheit und des Datenschutzes empfehlen wir, [Funktionsparameter zu filtern](/guides/filter-data/filter-function-parameters), bevor sie an unsere Server gesendet werden.

Die folgende Tabelle enthält eine Liste der akzeptierten Stammwerte pro Sprache. Jedes verschachtelte Objekt kann Werte enthalten, die zu gültigem JSON führen (Strings, Integer, Floats, Booleans, Nulls usw.).

| Sprache | Akzeptierte Stammwerte     |
| ------- | -------------------------- |
| Go      | JSON-serialisierter String |
| Java    | JSON-serialisierter String |
| PHP     | Arrays, Objekte            |

Das untenstehende Codebeispiel zeigt, wie benutzerdefinierte Request-Parameter gesetzt werden:

<CodeGroup>
  ```go Go theme={null}
  // Zusätzliches Setup ist erforderlich, um zuerst einen neuen Span abzurufen oder zu erstellen
  import (
  	"encoding/json"

  	"go.opentelemetry.io/otel/attribute"
  	"go.opentelemetry.io/otel/trace"
  )

  params := map[string]interface{}{
  	"param1": "value1",
  	"param2": "value2",
  	"nested": map[string]interface{}{
  		"param3": "value3",
  		"param4": "value4",
  	},
  }
  json, _ := json.Marshal(params)
  span.SetAttributes(attribute.String("appsignal.function.parameters", string(json)))
  ```

  ```java Java theme={null}
  // Zusätzliches Setup ist erforderlich, um zuerst einen neuen Span abzurufen oder zu erstellen
  import io.opentelemetry.api.trace.Span;
  // Wir verwenden die Jackson-JSON-Bibliothek
  // Sie müssen sie möglicherweise als Abhängigkeit zu Ihrem Projekt hinzufügen
  import com.fasterxml.jackson.databind.ObjectMapper;
  import java.util.HashMap;
  import java.util.Map;

  Map<String, Object> params = new HashMap<>();
  params.put("param1", "value1");
  params.put("param2", "value2");

  Map<String, String> nested = new HashMap<>();
  nested.put("param3", "value3");
  nested.put("param4", "value4");
  params.put("nested", nested);

  try {
      ObjectMapper mapper = new ObjectMapper();
      String jsonString = mapper.writeValueAsString(params);

      Span span = Span.current();
      span.setAttribute("appsignal.function.parameters", jsonString);
  } catch (Exception e) {
      // Fehlerbehandlung hier hinzufügen
  }
  ```

  ```php PHP theme={null}
  <?php
  use Appsignal\Appsignal;

  $params = [
      'param1' => 'value1',
      'param2' => 'value2',
      'nested' => [
          'param3' => 'value3',
          'param4' => 'value4',
      ],
  ];

  Appsignal::setFunctionParams($params);
  ```
</CodeGroup>

Für bestimmte Sprachen ist zusätzliches Setup erforderlich.
Bitte folgen Sie den Anweisungen für diese Sprachen:

* [Go](/go/custom-instrumentation)
* [Java](/java/custom-instrumentation)

## Einschränkungen

Wenn die Anwendung Funktionsparameter mehrmals setzt, ist der zuletzt gesetzte Wert maßgebend.
