---
name: "TSDebug"
section: "3ts"
platform: "linux"
package: "trafficserver-dev"
version: "9.2.5+ds-0+deb12u4"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/TSDebug"
---

# TSDebug(3ts)

traffic Server Debugging APIs

## NAME

TSDebug - traffic Server Debugging APIs

## SYNOPSIS

```
#include <ts/ts.h>
```

- **void TSStatus(const char \*format, ...)**

  - **void TSNote(const char \*format, ...)**

  - **void TSWarning(const char \*format, ...)**

  - **void TSError(const char \*format, ...)**

  - **void TSFatal(const char \*format, ...)**

  - **void TSAlert(const char \*format, ...)**

  - **void TSEmergency(const char \*format, ...)**

  - **void TSDebug(const char \*tag, const char \*format, ...)**

  - **int TSIsDebugTagSet(const char \*tag)**

  - **void TSDebugSpecific(int debug\_flag, const char \*tag, const char \*format, ...)**

  - **void TSHttpTxnDebugSet(*TSHttpTxn* txnp, int on)**

  - **void TSHttpSsnDebugSet(*TSHttpSsn* ssn, int on)**

  - **int TSHttpTxnDebugGet(*TSHttpTxn* txnp)**

  - **int TSHttpSsnDebugGet(*TSHttpSsn* ssn)**

  - **const char \*TSHttpServerStateNameLookup(*TSServerState* state)**

  - **const char \*TSHttpHookNameLookup(*TSHttpHookID* hook)**

  - **const char \*TSHttpEventNameLookup(*TSEvent* event)**

  - **TSAssert(...)**

  - **TSReleaseAssert(...)**

  ## DIAGS.LOG

The following methods print to diags.log with expected reactions as a coordinated outcome of Traffic Server, Traffic Manager, AuTest, CI, and your log monitoring service/dashboard (e.g. Splunk)

| | | | | |
| --- | --- | --- | --- | --- |
| API | Purpose | TrafficManager | AuTest+CI | LogMonitor |
| *TSStatus()* | basic information |  |  |  |
| *TSNote()* | significant information |  |  |  |
| *TSWarning()* | concerning information |  |  | track |
| *TSError()* | operational failure |  | FAIL | review |
| *TSFatal()* | recoverable crash | restart | FAIL | review |
| *TSAlert()* | significant crash | restart | FAIL | ALERT |
| *TSEmergency()* | unrecoverable,misconfigured | EXIT | FAIL | ALERT |

**NOTE:**

*TSFatal()*, *TSAlert()*, and *TSEmergency()* can be called within *TSPluginInit()*, such that Traffic Server can be shutdown promptly when the plugin fails to initialize properly.

## TRAFFICSERVER.OUT

*TSDebug()* logs the debug message only if the given debug *tag* is enabled. It writes output to the Traffic Server debug log through stderr.

*TSIsDebugTagSet()* returns non-zero if the given debug *tag* is enabled.

In debug mode, *TSAssert* Traffic Server to prints the file name, line number and expression, and then aborts. In release mode, the expression is not removed but the effects of printing an error message and aborting are. *TSReleaseAssert* prints an error message and aborts in both release and debug mode.

*TSDebugSpecific()* emits a debug line even if the debug *tag* is turned off, as long as debug flag is enabled. This can be used in conjunction with *TSHttpTxnDebugSet()*, *TSHttpSsnDebugSet()*, *TSHttpTxnDebugGet()* and *TSHttpSsnDebugGet()* to enable debugging on specific session and transaction objects.

*TSHttpServerStateNameLookup()*, *TSHttpHookNameLookup()* and *TSHttpEventNameLookup()* converts the respective internal state to a string representation. This can be useful in debugging (*TSDebug()*), logging and other types notifications.

## EXAMPLES

This example uses *TSDebugSpecific()* to log a message when a specific debugging flag is enabled:

```
#include <ts/ts.h>
// Produce information about a hook receiving an event
TSDebug(PLUGIN_NAME, "Entering hook=%s, event=%s",
        TSHttpHookNameLookup(hook), TSHttpEventNameLookup(event));
// Emit debug message if "tag" is enabled or the txn debug
// flag is set.
TSDebugSpecifc(TSHttpTxnDebugGet(txn), "tag" ,
        "Hello World from transaction %p", txn);
```

## SEE ALSO

**[TSAPI(3ts)](/TSAPI/3ts.md)**, **[printf(3)](/printf/3.md)**

## COPYRIGHT

2026, dev@trafficserver.apache.org
